MFC学习笔记01消息处理.pdf

MFC学习笔记01消息处理.pdf

ID:57338024

大小:469.65 KB

页数:9页

时间:2020-08-12

MFC学习笔记01消息处理.pdf_第1页
MFC学习笔记01消息处理.pdf_第2页
MFC学习笔记01消息处理.pdf_第3页
MFC学习笔记01消息处理.pdf_第4页
MFC学习笔记01消息处理.pdf_第5页
资源描述:

《MFC学习笔记01消息处理.pdf》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、模态对话框和非模态对话框单线程,程序运行时,若运行了模态对话框,则线程会进入等待状态(运行模态对话框时会使线程进入一个while循环),直到模态对话框结束,在运行模态对话框期间,程序不能运行其他的对话框,运行非模态对话框时则可以。单文档菜单消息的搜索流程是:视图类->文档类->文档模板类->框架窗口类->应用程序类。如果找不到,则将相应的界面元素变灰。1消息的分类MFC在Win32的消息结构MSG的基础上将消息分为三类:窗口消息、命令消息和控件消息。消息的区别在于:消息类别标识和消息的附加参数不

2、同。消息映射:ON_COMMAND();(命令消息)ON_MESSAGE()(自定义消息);ON_WM_...(预定义消息);1.1窗口消息1.1.1基础知识相关操作:与窗口相关的操作,例如,创建窗口、绘制窗口、移动窗口、改变窗口尺寸、鼠标在窗口区域内的各种操作等。凡是从基类CWnd派生的类都能够处理这类消息。形式:WM_XXX,其中WM为窗口消息类型前缀,XXX表示具体的窗口消息种类。1.1.2窗口消息产生途径①窗口之间交互产生;②系统产生的窗口消息;③程序根据需要发送窗口消息。1.2命令消息

3、1.2.1基础知识相关操作:处理用户的某个请求或者执行用户的某个命令。凡是从基类CCmdTarget派生的类都能够处理这类消息。形式:WM_COMMAND主要字段:message(消息类别)WM_COMMANDwParam(附加参数)低16位为命令ID、高16位为0。lParam(附加参数)0L由于wParam的高、低16位表示不同的含义,需要分解。wParam来判断命令消息,也需要组装一个wParam用于生成命令消息。系统提供的宏可以帮助完成这些工作。1.2.2参数分解HIGHWORD(wPa

4、ram);获取高16位,为0表示M_COMMAND类别的消息为命令消息。LOWWORD(wParam);获取低16位,为命令的资源ID。例如:菜单命令消息中:菜单项的资源ID;工具栏按钮消息中:工具栏按钮对应的资源ID;加速键消息中:加速键对应的资源ID。1.2.3参数组合使用宏MAKEWPARAM,例如:生成一条打开文件的命令消息,打开文件的菜单项的资源ID为ID_FILE_OPEN,消息命令为:(WM_COMMAND,MAKEWPARAM(ID_FILE_OPEN,0),0L)1.2.4命令

5、消息产生途径①选择菜单项;②单击工具栏按钮;③按加速键;④程序根据需要发送的命令消息。1.3控件消息1.3.1相关操作此类消息与控件窗口中的某个事件相关,例如:文本框控件窗口内的内容发生改变、列表框控件中某个选项被选择、按钮控件被单击、滑杆条的游标被移动等,都会发出相应的控件事件消息。1.3.2形式由于控件是近年来软件开发中最为活跃的,控件的种类不断增加,随之控件消息的类别也迅速增加,原来的控件消息格式越来越不能满足控件消息的描述,因此,必须寻求新的控件消息描述方法。由于历史的原因,控件消息的新

6、旧描述形式必须并存才能兼容所有的控件消息。1.3.3控件消息产生途径①由控件的各类事件发出;②程序根据需要模拟控件事件发送通知消息。2自定义消息2.1自定义消息的步骤①添加自定义消息,例如:#defineWM_MESSAGENAME(WM_USER+100)(Microsoft推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息)②在.H头文件中,添加消息响应函数,该函数有规定的格式:LONGFunction_Name(WPARAMw,LPARAMl);对于添

7、加的自定义消息WM_MESSAGENAME的函数处理形式如下:LONGOnMessageName(WPARAMw,LPARAMl);③添加消息响应宏在响应该消息的类的消息响应块中,加入以下语句。ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)④在.cpp源文件中,添加消息响应函数体。其代码如下:LONGCMyClass::OnMessageName(WPARAw,LPARAMl){}(类向导ClassWizard不允许增加用户自定义消息,所以开发人员必须手工添加。添加后,

8、类向导ClassWizard就可以像处理其他消息一样处理自定义消息了。)如果用户需要整个系统唯一的消息,则可以调用SDK函数RegisterWindowMessage()并使用ON_REGISTER_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。⑤给窗口发送消息SendMessage(WM_MESSAGENAME,0L,0L);2.2SendMessage和PostMessageSendMessage传递消息后,需要等到消息被处理完成才能返回。SendMessage方法:首先

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。