第17讲鼠标消息响应和界面设计课件.ppt
《第17讲鼠标消息响应和界面设计课件.ppt》由会员分享,可在线阅读,更多相关《第17讲鼠标消息响应和界面设计课件.ppt(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第17讲讲 鼠标消息响应和界面设计鼠标消息响应和界面设计本讲主要内容鼠标消息响应 设计应用程序界面元素 工具栏状态栏鼠标光标窗口标题与图标2鼠标消息响应【例【例9-4】修改例9-3的单文档应用程序MyTextOut,程序运行后使用菜单命令,调用对话框输入显示的文本内容,在鼠标点击位置显示文本。3鼠标消息响应【编程步骤编程步骤】(1)例9-3中已经做好的对话框资源保留不变。在本例中只需要使用该对话框输入的文本内容,输入的坐标值不在本例中使用。4鼠标消息响应(3)编写鼠标消息的响应函数。当用户在视图窗口中单击鼠标左键时,应用程序要捕获鼠标,记下鼠标当时的位置坐标,以便将文本串显示于该位置。当用户
2、松开鼠标左键时,应用程序要释放鼠标,并刷新视图,以显示程序运行结果。6记录鼠标位置的变量类型为CPoint类型,变量名为 m_TextPos,该变量设计为CMyTextOutView类的成员,以便从该类的成员函数OnLButtonDown(UINT nFlags,CPoint point)的第二个参数point中取得鼠标当前位置信息。打开MyTextOutView.h文件,添加代码如下:鼠标消息响应7鼠标消息响应class CMyTextOutView:public CView protected:CPoint m_TextPos;/记录鼠标左击当时的位置坐标/Generated messag
3、e map functionsprotected:/AFX_MSG(CMyTextOutView)afx_msg void OnLButtonDown(UINT nFlags,CPoint point);/自动生成afx_msg void OnLButtonUp(UINT nFlags,CPoint point);/自动生成;8void CMyTextOutView:OnLButtonUp(UINT nFlags,CPoint point)/TODO:Add your message handler code here and/or call defaultReleaseCapture();/
4、必须释放鼠标CView:OnLButtonUp(nFlags,point);Invalidate(TRUE);/刷新视图鼠标消息响应为什么要捕获和释放鼠标呢?由于用户的鼠标可以在屏幕上任意移动。当鼠标移出窗口外时,窗口无法收到鼠标消息。此时,如果松开了鼠标左键,应用程序由于无法接受到该条消息而不会调用松开鼠标消息响应函数,这样就造成了错误。如何避免这种情况发生呢?解决的办法是要让窗口在鼠标移出窗口外时仍然能接受到鼠标消息。而Windows提供了一个API函数SetCapture()解决了这一问题。Invalidate()是CWnd类的成员函数,功能是刷新整个客户区。可以在CWnd派生类中直接调
5、用函数Invalidate()。视图类是CWnd类的派生类,在此调用之刷新当前视图。10鼠标消息响应(4)修改相关文件中的代码。打开MyTextOutView.cpp文件,重新编写OnDraw函数:void CTextOut_3View:OnDraw(CDC*pDC)CTextOut_3Doc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:add draw code for native data herepDC-TextOut(m_TextPos.x,m_TextPos.y,pDoc-m_strText);编译连接,运行程序界面如图所示。11设计应用
6、程序界面元素【编程步骤编程步骤】1添加“文字”工具栏(1)在ResourceView中的Toolbar中插入新的工具栏,创建新的自定义工具栏 IDR_MY_TOOLBAR。13设计应用程序界面元素(3)进行“显示文字”按钮图标的编辑。如图所示。15设计应用程序界面元素(4)添加工具栏成员变量并修改OnCreate函数。打开MainFrm.h,添加新的工具栏成员变量添加新的工具栏成员变量。class CMainFrame:public CFrameWnd protected:/control bar embedded membersCStatusBar m_wndStatusBar;CToolB
7、ar m_wndToolBar;CToolBar m_wndMyBar;/新的成员变量16设计应用程序界面元素/设置工具栏窗口的标题m_wndMyBar.SetWindowText(_T(我的工具栏我的工具栏);m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);m_wndMyBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);DockControlBar(&m_wndMyBar,AFX_IDW_DOCKBAR_TOP);re
8、turn 0;编译连接,运行程序界面如图所示。编译连接,运行程序界面如图所示。设置框架窗口的允许停靠性质 设置工具栏的停靠性质。其中参数指定了工具栏将停靠在应用程序框架窗口的哪个边上 确定工具栏如何被停靠在框架窗口上。通过确定工具栏如何被停靠在框架窗口上。通过CFrameWnd:DockControlBar函函数完成。函数原型如下:数完成。函数原型如下:void DockControlBar(CControlBar*pBar,UINT nDockBarID=0,LPCRECT lpRect=NULL)其参数如下:其参数如下:pBar:要停靠的控件栏指针。:要停靠的控件栏指针。nDockBarI
9、D:确定停靠在框架窗口的哪条边上。可以取值参数如表:确定停靠在框架窗口的哪条边上。可以取值参数如表9-7。lpRect:以屏幕坐标表示目标框架窗口非用户区中可被控件条停靠的位置。默以屏幕坐标表示目标框架窗口非用户区中可被控件条停靠的位置。默认参数为认参数为NULL。18设计应用程序界面元素2修改状态栏状态栏在应用程序中的主要作用是起到提示作用。下面需要在状态栏中增加一个新的窗格,用来显示鼠标当前的位置坐标。因为需要知道鼠标移动时的位置坐标,故需要在视图类的视图类的OnMouseMove函数函数中添加相关代码。19设计应用程序界面元素(1)在状态栏资源中添加一个窗格。实现的方法是打开MainFr
10、m.cpp文件,找到静态数组indicators的定义,在第一个数组元素ID_SEPARATOR后面增加一个新的数组元素,即添加了一个新的窗格,为了表明这个窗格的用途,故命名为ID_INDICATOR_MOUSE_POS。修改后的代码如下。static UINT indicators=ID_SEPARATOR,/状态提示行窗格ID_INDICATOR_MOUSE_POS,ID_INDICATOR_MOUSE_POS,/鼠标位置坐标值窗格ID_INDICATOR_CAPS,/大写ID_INDICATOR_NUM,/数字键ID_INDICATOR_SCRL,/滚动;20设计应用程序界面元素(2)在
11、ResourceView的String Table中添加ID_INDICATOR_MOUSE_POS,在Caption中输入“鼠标的当前坐标”。21设计应用程序界面元素(3)添加鼠标移动消息的响应函数。编写函数代码,将鼠标的位置坐标信息显示在状态栏新增的窗格中。22设计应用程序界面元素3鼠标光标的编辑与使用光标(cursor)是一种特殊的、可移动的3232点阵图形,用来作为鼠标指针的图形标志。光标与图标的最大区别是光标有一个热点,用于确定光标当前的像素位置。设置不同状态的光标是为了更加形象地表示出当前应用程序的状态,例如在执行“显示文字”命令时,改变鼠标光标的形状,用于表示当前的程序行为状态。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 17 鼠标 消息 响应 界面设计 课件
限制150内