- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ch2 MFC(二)
第2章 MFC应用程序概述(二) 2.3 消息映射与消息处理 2.3.1 消息的类别及其描述 标准Windows消息、控件消息和命令消息。 1.标准Windows消息 除WM_COMMAND以外,所有以“WM_”为前缀的消息都是标准Windows消息。标准Windows消息都有默认的处理函数。 又分为3类 键盘消息、鼠标消息和窗口消息。 (1) 键盘消息 键盘消息与键盘某个键的动作相关联。 WM_KEYDOWN: :键按下时产生的消息 WM_KEYUP:键释放 WM_CHAR:输入字符 (2) 鼠标消息 WM_MOUSEMOVE:鼠标移动。 WM_RBUTTONDOWN:鼠标右键按下。 WM_LBUTTONDOWN:鼠标左键按下。 WM_LBUTTONDBLCLICK:鼠标双击。 (3) 窗口消息 创建窗口、绘制窗口、移动窗口和销毁窗口等产生的消息。 2.控件消息 控件消息是指控件或其他子窗口向父窗口发送的WM_COMMAND消息。发送控件消息的控件使用唯一的ID号来识别。 3.命令消息 命令消息是由菜单项、工具栏按钮、快捷键等用户界面对象发出的WM_COMMAND消息。 2.3.2 MFC消息映射机制 MFC采用消息映射来处理消息。 这种消息映射机制包括一组消息映射宏,用于把一个Windows消息和其消息处理函数联系起来。 与MFC消息映射机制有关的宏有以下3个: DECLARE_MESSAGE_MAP( ) 、 BEGIN_MESSAGE_MAP(…) END_MESSAGE_MAP( ) 为了使用消息映射宏,首先在类定义的结尾用DECLARE_MESSAGE_MAP( )宏来声明使用消息映射,该宏表示在为各个处理函数所写的类声明之后存在消息映射条目,这些函数是该类的成员函数。 然后在类的实现源文件中用BEGIN_MESSAGE_MAP( )和END_MESSAGE_MAP( ) 来定义消息映射。 MFC应用程序消息映射示例如下: 【例2.2】 利用ClassWizard为生成的应用程序Li2_1添加鼠标右键按下消息,即WM_RBUTTONDOWN消息,并为File菜单下的Open菜单项添加消息处理函数,分析ClassWizard类向导所进行的消息映射。 2.3.3 自定义消息处理 (自学) 程序员自己定义消息名、分配ID值及完成消息映射的工作。 Windows将所有的消息值分为4段: 0x0000~0x03FF消息值范围段用于Windows系统消息 0x0400~0x7FFF段用于用户自定义的窗口消息 0x8000~0xBFFF段为Windows保留值 0xC000~0xFFFF段用于应用程序的字符串消息 常量WM_USER(为0x0400)与第一个自定义消息值相对应,用户必须为自己的消息定义相对于WM_USER的偏移值,利用#define语句直接定义自己的消息,如下所示: ?#define WM_MYUSER WM_USER+3 ; // 自定义消息WM_USER 例2.3】 编写一个自定义消息应用程序,并添加WM_RBUTTONDOWN消息。当程序运行时,用户在视图窗口中单击鼠标右键,则调用自定义消息处理函数,输出文本“自定义消息WM_MYMESSAGE的处理函数被调用!”。 CLi2_3View.h 开始位置添加 #define WM_MYMESSAGE WM_USER+1 CLi2_3View.h 末尾DECLARE_MESSAGE_MAP()之前添加 afx_msg LRESULT OnMyMessage(WPARAM wPARAM,LPARAM lParam); 在CLi2_3View.cpp的消息映射表中(END_MESSAGE_MAP()之前)添加 ON_MESSAGE(WM_MYMESSAGE,OnMyMessage) 在CLi2_3View.cpp最后手工添加如下代码 在CLi2_3View.cpp最后手工添加如下代码 LRESULT CLi2_3View::OnMyMessage(WPARAM wPARAM,LPARAM lParam) { CClientDC dc(this); CFont NewFont,*OldFont; NewFont.CreatePointFont(150,黑体,NULL); OldFont=dc.SelectObject(NewFont); dc.TextOut(50,100,自定义消息WM_MYMESSAGE的处理函数被调用! ); return 0; } 在WM_RBUTTONDOWN消息处理函数中添加 SendMessage(WM_MYMESSAGE); * *
文档评论(0)