简要回顾.ppt
《简要回顾.ppt》由会员分享,可在线阅读,更多相关《简要回顾.ppt(61页珍藏版)》请在三一办公上搜索。
1、简要回顾,创建一个基本应用程序框架添加并使用对话框使用向导创建对话框应用程序使用无模式对话框通用对话框和消息对话框,常用控件(一),4,主要内容,使用ClassWizard进行消息映射键盘和鼠标消息映射计时器消息其他窗口消息的映射控件的创建方法控件的消息及消息映射控件的数据交换和数据校验,结合Ex_SDI使用ClassWizard,ClassWizard概述 打开MFC的ClassWizard的方法:选择“View”“ClassWizard”菜单或直接使用Ctrl+W快捷键在源代码文件的文档编辑窗口中,右击鼠标,选择ClassWizard命令当ClassWizard打开后,就会弹出如图的MFC
2、 ClassWizard对话框,打开MFC的ClassWizard,消息和消息映射,消息分类Windows应用程序中的消息主要有三种类型。窗口消息(Windows message)主要指由WM_开头的消息,一般由窗口类和视图类对象来处理窗口消息往往带有参数,以标志处理消息的方法控件的通知消息(Control notifications)当控件的状态发生改变时,控件就会向其父窗口发送WM_COMMAND通知消息应用程序框架处理控件消息的方法和窗口消息相同,但按钮的BN_CLICKED通知消息除外,它的处理方法与命令消息相同,消息和消息映射,命令消息(Command message)主要包括由用户
3、交互对象(菜单、工具条的按钮、快捷键等)发送的WM_COMMAND通知消息命令消息的处理方式与其他两种消息不同,它能够被多种对象接收、处理,这些对象包括文档类、文档模板类、应用程序本身以及窗口和视类等而窗口消息和控件的通知消息是由窗口对象接收并处理的,这里的窗口对象是指从CWnd中派生的类的对象包括CFrameWnd、CMDIFrameWnd、CMDIChildWnd、CView、CDialog以及从这些类派生的对象等,ClassWizard映射消息的一般方法,示例:向CEx_SDIView中添加WM_LBUTTOMDOWN的消息映射,则可按下列步骤进行:(1)按Ctrl+W快捷键打开MFC
4、ClassWizard对话框(2)在Class name组合框中,将类名选定为CEx_SDIView(3)在Object IDs列表框中选定CEx_SDIView,而在Messages列表中选定WM_LBUTTOMDOWN消息(4)双击Messages列表中的WM_LBUTTOMDOWN消息或单击Add Function按钮,都会在CEx_SDIView类中添加该消息的映射函数OnLButtonDown,同时在Member funcions列表中显示这一消息映射函数和被映射的消息,ClassWizard映射消息的一般方法,ClassWizard映射消息的一般方法,(5)单击Edit Code,
5、转向文档窗口,定位到OnLButtonDown源代码处(6)添加下列代码:void CEx_SDIView:OnLButtonDown(UINT nFlags,CPoint point)/TODO:Add your message handler code/here and/or call default MessageBox(你好,我的Visual C+世界!,问候,0);CView:OnLButtonDown(nFlags,point);(7)运行程序,在窗口客户区左击,弹出一个消息对话框,ClassWizard映射消息的一般方法,查看CEx_SDIView程序代码,可以发现:ClassW
6、izard为WM_LBUTTOMDOWN的消息映射作了以下三个方面内容的安排:1)在头文件Ex_SDIView.h中声明消息处理函数OnLButtonDown:protected:/AFX_MSG(CEx_SDIView)afx_msg void OnLButtonDown(UINT nFlags,CPoint point);/AFX_MSG DECLARE_MESSAGE_MAP(),ClassWizard映射消息的一般方法,2)在Ex_SDIView.cpp源文件前面的消息映射入口处,添加映射宏:BEGIN_MESSAGE_MAP(CEx_SDIView,CView)/消息映射开始/AFX
7、_MSG_MAP(CEx_SDIView)ON_WM_LBUTTONDOWN()/AFX_MSG_MAPEND_MESSAGE_MAP()/消息映射结束,ClassWizard映射消息的一般方法,3)在Ex_SDIView.cpp文件中写入一个空的消息处理函数的模板,框架:void CEx_SDIView:OnLButtonDown(UINT nFlags,CPoint point)/TODO:Add your message handler/code here and/or call default CView:OnLButtonDown(nFlags,point);,ClassWizard
8、添加映射消息,根据ClassWizard产生的上述消息映射过程,可以手动添加一些ClassWizard不支持的消息映射函数,以完成特定的功能鼠标和键盘消息各自都有相应的消息处理宏和预定义消息处理函数因此消息映射函数名称不再需要用户重新定义对于菜单和按钮等命令消息来说,用ClassWizard映射时会弹出一个对话框,用来指定消息映射函数的名称,ClassWizard删除映射消息,若指定的消息映射函数需要删除需要先在ClassWizard对话框的Messages列表中选定要删除的消息映射函数,然后单击Delete Function按钮最后关闭ClassWizard对话框,并在该消息映射函数所在的类
9、实现文件(.cpp)中将映射函数定义的代码全删除,主要内容,使用ClassWizard进行消息映射键盘和鼠标消息映射计时器消息其他窗口消息的映射控件的创建方法控件的消息及消息映射控件的数据交换和数据校验,键盘和鼠标消息,按下一个键或组合键时,将WM_KEYDOWN或WM_SYSKEYDOWN放入具有输入焦点的应用程序窗口的消息队列中键被释放时,把WM_KEYUP或WM_SYSKEYUP消息放入消息队列中对字符键,会在这两个消息之间产生WM_CHAR消息,键盘和鼠标消息,ClassWizard能自动添加了当前类的WM_KEYDOWN和WM_KEYUP击键消息处理函数的调用,它们具有下列函数原型:
10、afx_msg void OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags);afx_msg void OnKeyUp(UINT nChar,UINT nRepCnt,UINT nFlags);afx_msg是MFC用于定义消息函数的标志,参数nChar表示虚拟键代码,nRepCnt表示当用户按住一个键时的重复计数,nFlags表示击键消息标志虚拟键代码指与设备无关的键盘编码。最常用的虚拟键代码已被定义在Winuser.h中,键盘和鼠标消息,MFC中的ClassWizard也提供相应的字符消息处理框架,并自动添加了当前类的WM_CHAR消息处理函数调用
11、,它具有下列函数原型:afx_msg void OnChar(UINT nChar,UINT nRepCnt,UINT nFlags);nChar表示键的ASCII码,nRepCnt表示当用户按住一个键时的重复计数,nFlags表示字符消息标志通常,只将键盘消息发送给具有输入焦点的窗口,但鼠标消息不受这种限制只要鼠标移过窗口的客户区时,就会向该窗口发送WM_MOUSEMOVE(移动鼠标)消息,键盘和鼠标消息,前面的客户区是指窗口中用于输出文档的区域。在窗口的客户区中按下或释放一个鼠标键时,还会产生相应的消息ClassWizard会将映射成类似afx_msg void OnXXXX的消息处理函数
12、,原型:afx_msg void OnXXXX(UINT nFlags,CPoint point);point表示鼠标光标在屏幕的(x,y)坐标;nFlags表示鼠标按钮和键盘组合情况,它可以是下列值的组合(MK前缀表示“鼠标键”):MK_CONTROL 键盘上的Ctrl键被按下MK_LBUTTON 鼠标左按钮被按下MK_MBUTTON 鼠标中按钮被按下MK_RBUTTON 鼠标右按钮被按下MK_SHIFT 键盘上的Shift键被按下,想知道某个键被按下,可用对应的标识与nFlags进行逻辑“与”(&)运算,所得结果若为TRUE(非0)时,则表示该键被按下,主要内容,使用ClassWizard
13、进行消息映射键盘和鼠标消息映射计时器消息其他窗口消息的映射控件的创建方法控件的消息及消息映射控件的数据交换和数据校验,映射计时器消息,有一种常用的输入设备就是计时器,它周期性地按一定的时间间隔向应用程序发送WM_TIMER消息由于它能实现“实时更新”以及“后台运行”等功能,因而在应用程序中计时器是一个难得的程序方法应用程序是通过CWnd的SetTimer函数来设置并启动计时器的,映射计时器消息,函数原型UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT*lpfnTimer)(HWND,UINT,UINT,DWORD);nI
14、DEvent指定该计时器的标识值(不能为0),应用程序需要多个计时器时可多次调用该函数,但每一个计时器的标识值应是唯一的,各不相同nElapse表示计时器的时间间隔(单位为毫秒)lpfnTimer是一个回调函数的指针,该函数由应用程序来定义,用来处理计时器WM_TIMER消息一般情况下该参数为NULL,此时WM_TIMER消息被放入到应用程序消息队列中供CWnd对象处理,映射计时器消息,SetTimer函数成功调用后返回新计时器的标识值应用程序不再使用计时器时,调用CWnd:KillTimer函数来停止WM_TIMER消息的传送,原型:BOOL KillTimer(int nIDEvent);
15、nIDEvent和用户调用SetTimer函数设置的计时器标识值是一致的对于WM_TIMER消息,ClassWizard会将其映射成具有下列消息处理函数:afx_msg void OnTimer(UINT nIDEvent);,主要内容,使用ClassWizard进行消息映射键盘和鼠标消息映射计时器消息其他窗口消息的映射控件的创建方法控件的消息及消息映射控件的数据交换和数据校验,其他窗口消息的映射,系统中,除了用户输入产生的消息外,还有许多系统根据应用程序的状态和运行过程产生的消息,有时也需要用户进行处理(1)WM_CREATE消息窗口对象创建后,向视图发送的第一个消息如果用户有什么工作需要在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简要 回顾
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5339257.html