题目:5-31到5-33的综合题 思路: 1. 为程序添加主菜单(圆绘制(设置,颜色)),并为之关联COvalView的函数。 2. 在资源中插入一个对话框IDD_DIALOGSET,添加按钮,并为控件关联相应的变量(UINT m_nRadius)关联一个类Set。。 3. 用到的函数: SetWindowText: 函数功能:该函数改变指定窗口的标题栏的文本内容(如果窗口有标题栏)。 函数原型:BOOL SetWindowText(HWND hwnd,LPCTSTR lpString); 参数: hWnd:要改变文本内容的窗口或控件的句柄。 lpString:指向一个空结束的字符串的指针,该字符串将作为窗口或控件的新文本。 返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。 变量的定义: 在CSDIDrawView定义变量: protected: CPoint m_ptOrigin;//鼠标的起始位置 bool m_bDragging;//拖拽标志 HCURSOR m_hCross;//光标句柄 鼠标的处理: SetCapture: 函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。 函数原型:HWND SetCapture(HWND hwnd); 参数: hWnd:当前线程里要捕获鼠标的窗口句柄。 返回值:返回值是上次捕获鼠标的窗口句柄。如果不存在那样的句柄,返回值是NULL。 ::SetCursor 函数功能:该函数确定光标的形状。 函数原型:HCURSOR SetCursor(HCURSOR hCursor); AppendMenu: 该函数在指定的菜单条、下拉式菜单、子菜单或快捷菜单的末尾追加一个新菜单项。此函数可指定菜单项的内容、外观和性能。函数AppendMenu 己被lnsertMenultem取代。但如果不需要lnsertMenultem的扩展特性,仍可使用AppendMenu。 TrackPopupMenu: 函数功能:该函数在指定位置显示快捷菜单,并跟踪菜单项的选择。快捷菜单可出现在屏幕上的任何位置。 函数原型:BOOL TrackPopupMenu(HMENU hMenu,UINT uFlags,int x,int y,int nReserved,HWND hWnd,CONST RECT* prcRect); 返回值:如果在参数uFlags里指定了TPM_RETURNCMD值,则返回值是用户选择的菜单项的标识符。如果用户未作选择就取消了菜单或发生了错误,则退回值是零。如果没在参数uFlags里指定TPM_RETURNCMD值,若函数调用成功,返回非零值,若函数调用失败,返回零。若想获得更多的错误信息,清调用GetLastError void CSDIDrawView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default SetCapture(); ::SetCursor(m_hCross); m_ptOrigin=point;// m_bDragging=TRUE; CView::OnLButtonDown(nFlags, point); } void CSDIDrawView::OnRButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default if(m_bDragging) { m_bDragging=false; ReleaseCapture(); } CView::OnRButtonUp(nFlags, point); } 鼠标放开的处理: void CSDIDrawView::OnSet() { // TODO: Add your command handler code here CSet dlg;//定义一个对话框 dlg.m_nRadius=m_nCViewRadius;//设置编辑框显示的初值 if(dlg.DoModal()==IDOK) { m_nCViewRadius=dlg.m_nRadius; } } Invalidate(); void CSDIDrawView::OnContextMenu(CWnd* pWnd, CPoint point) { // TODO: Add your message handler code here CMenu menuPopup;//声明菜单对象 if(menuPopup.CreatePopupMenu())//创建一个弹出式菜单 { menuPopup.AppendMenu(MF_STRING,ID_SHOWTEXT,"显示文本\tCtrl+S"); menuPopup.AppendMenu(MF_STRING,ID_PICTURE,"画圆\tCtrl+P"); menuPopup.AppendMenu(MF_STRING,IDM_SET,"设置圆的半径"); menuPopup.TrackPopupMenu(TPM_LEFTBUTTON,point.x,point.y,this);//显示弹出式菜单 } } 本文来源:https://www.wddqw.com/doc/520df22ccfc789eb172dc811.html