- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.4.2 消息和消息映射 5. 鼠标消息 对于所有这些消息来说,ClassWizard都会将映射成类似afx_msg void OnXXXX 的消息处理函数,如前面WM_LBUTTONDOWN的消息函数OnLButtonDown, 它们具有函数原型: 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)时,则表示该键被按下。例如,若收到了 WM_LBUTTONDOWN消息,且值nFlagsMK_CONTROL是TRUE时,则表明 按下鼠标左键的同时也按下Ctrl键。 3.4.2 消息和消息映射 6. 计时器消息 应用程序是通过CWnd的SetTimer函数来设置并启动计时器的,这个函数的原型如下: UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) ); 参数nIDEvent用来指定该计时器的标识值(不能为0),当应用程序需要多个计时器时可多次 调用该函数,但每一个计时器的标识值应是唯一的,各不相同。nElapse表示计时器的时 间间隔(单位为毫秒),lpfnTimer是一个回调函数的指针,该函数由应用程序来定义,用来 处理计时器WM_TIMER消息。一般情况下该参数为NULL,此时WM_TIMER消息被放入到 应用程序消息队列中供CWnd对象处理。 SetTimer函数成功调用后返回新计时器的标识值。当应用程序不再使用计时器时,可调用 CWnd:: KillTimer函数来停止WM_TIMER消息的传送,其函数原型如下: BOOL KillTimer( int nIDEvent ); 其中nIDEvent和用户调用SetTimer函数设置的计时器标识值是一致的。 对于WM_TIMER消息,ClassWizard会将其映射成具有下列原型的消息处理函数: afx_msg void OnTimer( UINT nIDEvent ); 通过nIDEvent可判断出WM_TIMER是哪个计时器传送的。 3.4.2 消息和消息映射 7. 其他窗口消息 在系统中,除了用户输入产生的消息外,还有许多系统根据应用程序的状态和运 行过程产生的消息,有时也需要用户进行处理。 (1) WM_CREATE消息。该消息是在窗口对象创建后,Windows向视图发送的第 一个消息;如果用户有什么工作需要在初始化时处理,就可在该消息处理函数中 加入所需代码。但是,由于WM_CREATE消息发送时,窗口对象还未完成,窗 口还不可见,因此在该消息处理函数 OnCreate内,不能调用那些依赖于窗口处于完成激活状态的Windows函数,如 窗口的绘图函数等。 (2) WM_CLOSE或WM_DESTROY消息。当用户从系统菜单中关闭窗口或者父 窗口被关闭时,Windows都会发送WM_CLOSE消息;而WM_DESTROY消息是 在窗口从屏幕消失后发送的,因此它紧随WM_CLOSE之后。 (3) WM_PAINT消息。当窗口的大小发生变化、窗口内容发生变化、窗口间的层 叠关系发生变化或调用函数UpdateWindow或RedrawWindow时,系统都将产生 WM_PAINT消息,表示要重新绘制窗口的内容。该消息处理函数的原型是; afx_msg void OnPaint(); 用ClassWizard映射该消息的目的是执行自己的图形绘制代码 。 3.4.3 类的添加和删除 1. 类的添加 给项目添加一个类有很多方法,例如选择“工程”→“添加工程”→“Files”菜单命令, 可将外部源文件所定义的类添加到项目中。但是如果使用MFC的ClassWizard, 就可以从大多数MFC类中派生一个类,并且创建的类代码自动包含MFC所必需 的消息映射等机制。 用MFC ClassWizard给项目添加一个类通常是按下列步骤进行的: (1) 按快捷键Ctrl+W启
文档评论(0)