关注公号【逆向通信猿】更精彩!!!

第9天 MFC消息映射机制的原理

9.1 对话框常用的回调函数

a)窗口创建时的消息和虚函数包括:WM_CREATEWM_INITDIALOG,和PreSubclassWindow等;

b)窗口关闭时的消息和虚函数:WM_CLOSEWM_DESTROY以及OnOKOnCancel等。

c)有些消息是所有窗口都通用的,例如:WM_CREATEWM_CLOSEWM_DESTROY等。

d)有些消息和虚函数是对话框专用的回调函数,例如:WM_INITDIALOG消息以及OnOKOnCancel等虚函数。

9.2 WM_CREATE和WM_INITDIALOG消息:

a)通过MSDN的说明可以查看到,WM_CREATEWM_INITDIALOG都是是窗口刚创建时的回调消息;

b)当窗口还未显示出来之前,对窗口做预先处理的回调函数。

c)WM_CREATE是所有窗口通用的创建时回调消息,用于包括对话框、MDI或者SDI等任何窗口的初始化,对应的消息映射函数是OnCreate

d)可以在该函数中编写代码,在窗口刚创建还未显示时,修改父窗口属性或者创建内部子窗口。

e)WM_INITDIALOG对话框是对话框专用消息,最常用来初始化对话框及其内部控件,对应的消息映射函数是OnInitDialog

f)这个函数内部第一行一般是先执行基类函数CDialog::OnInitDialog,基类函数执行过程会将所有对话框资源模板内的控件都创建完毕因此可以在该函数中,编写代码来对子窗口的做初始化设置。

g)PreSubclassWindow比OnCreate函数更早调用。

9.2 系统关闭过程:WM_SYSCOMMAND->WM_CLOSE->OnCancel->WM_DESTROY

a)WM_SYSCOMMAND:是对所有系统菜单中的命令的管理(包括:最大化、最小化、关闭、移动、大小等)

b)WM_CLOSE:是WM_SYSCOMMAND关闭分支消息

c)WM_DESTROY:窗口的句柄还在,以及子窗口都可以使用:窗口已经处于不可见状态,并且不能取消关闭了

d)任何窗口包括控件、框架和对话框窗口关闭时,必经此消息,甚至一些程序员把这个消息当做析构函数使用了。

9.3 SendMessage和PostMessage

a)消息回调函数的返回值

{//消息回调函数switch (uMsg){case WM_CLOSE://ShowWindow(hwndDlg, SW_MINIMIZE);MessageBox(hwndDlg, _T("关闭"), ("提示"), MB_OK);return TRUE;// TRUE代表系统不用关闭了 FALSE代表系统继续关闭

返回值类型不同:两个函数的4个参数的意义是一样的,只有返回值类型不同(其实从数据上看他们一样是一个32位的数,只是意义不一样);

b)SendMessage的返回值类型是LRESULT:表示的是消息被处理后的返回值

PostMessage的返回值类型是BOOL:表示的是消息是不是传递成功。

c)PostMessage 是异步(不等待)的,SendMessage 是同步(阻塞)的。

PostMessage只把消息放入窗口消息队列中,不管消息被处理后的结果就返回;而SendMessage等待消息被处理完了之后才返回。

d)如果在同一个线程内,常常使用SendMessage发送消息时,速度快并能得到返回的消息处理结果。在不同线程或者进程之间,一般使用PostMessage发送消息,把消息先放入目标窗口的消息队列中,然后由目标窗口通过消息循环自行派发处理。

e)SendMessagePostMessage函数都是消息传递函数,两个函数的格式:

LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
BOOL PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);

9.4 消息分类:

a)系统消息:范围是从0WM_USER

WM_CREATE:
...
...
WM_USER 1024

b)用户(自定义)消息:

WM_USER+1以后的所有消息都是用户可以使用消息

c)Win32工程中直接把用户消息(例如:UM_TEST),放到消息处理函数的switch分支即可;

d)MFC工程中在类向导中有专门的一个按钮来创建“用户自定义消息”,生成的代码是ON_MESSAGE消息映射种类。

【MFC系列-第9天】MFC消息映射机制的原理相关推荐

  1. MFc消息映射机制理解

    何谓消息.消息处理函数.消息映射? 消息简单的说就是指通过输入设备向程序发出指令要执行某个操作.具体的某个操作是你的一系列代码.称为消息处理函数.在SDK中消息其实非常容易理解,当窗口建立后便会有一个 ...

  2. MFC消息映射机制概述

    消息 窗口消息一般由三个部分组成: 1)一个无符号整数,是消息值: 2)消息附带的 WPARAM 类型的参数: 3)消息附带的 LPARAM 类型的参数.其实我们一般所说的消息是狭义上的消息值,也就是 ...

  3. 用MFC消息映射机制自定义消息

    Windows系统中的程序大部分都是通过消息和事件驱动的.在windows下的应用程序主要工作是进行消息的循环处理,通过循环等待消息的到来和事件的发生,然后对不同的消息和事件运行相关的代码,完成相应的 ...

  4. VC++/MFC消息映射机制(1):MFC消息映射原理

    VC++/MFC消息映射机制(1):模仿MFC的消息映射原理 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) <C++语法详解>网盘地址:https://p ...

  5. MFC关键技术-消息映射机制

  6. RabbitMQ 消息确认机制 以及 原理解析

    https://www.cnblogs.com/DBGzxx/p/10091070.html

  7. 【MFC系列2】Win32项目转换为MFC项目

    关注公号[逆向通信猿]更精彩!!! 一.MFC的组成 a)必须有一个CWinApp的派生类: b)必须用派生类在全局定义一个对象theApp; c)在派生类中必须重写InitInstance虚函数: ...

  8. MFC 教程【4_消息映射的实现】

    消息映射的实现 Windows消息概述 Windows应用程序的输入由Windows系统以消息的形式发送给应用程序的窗口.这些窗口通过窗口过程来接收和处理消息,然后把控制返还给Windows. 消息的 ...

  9. 【转】MFC消息映射详解(整理转载)

    消息:主要指由用户操作而向应用程序发出的信息,也包括操作系统内部产生的消息.例如,单击鼠标左按钮,windows将产WM_LBUTTONDOWN消息,而释放鼠标左按钮将产生WM_LBUTTONUP消息 ...

最新文章

  1. 写代码做副业月入10K+的方法都藏在这几个公众号
  2. ​基于BCI的现代神经反馈有助于认知增强
  3. 每日一博 - tcpdump小技巧
  4. Linux的启动流程(CentOS 6)
  5. 风变python怎么样_Python取代Excel?风变编程带你了解如何更好地学Python!
  6. Postman Forbidden (CSRF token missing or incorrect.)
  7. 企业级数据库备份方案完全攻略
  8. u8虚拟服务器端口,用友u8服务器参数配置
  9. SQL知识点脑图(一张图总结SQL)
  10. html源码taptap,taptap开源应用电脑版
  11. 【滤波】一维卡尔曼滤波器
  12. 麒麟9000加鸿蒙,首发预装鸿蒙OS!华为Mate40 Pro 4G版入网:麒麟9000加持
  13. 笔记本电脑外接显示器投屏问题
  14. 如何查看SQL Server的索引碎片情况并进行整理
  15. C++ AVL树(补充)
  16. js按钮确认删除提示
  17. 128. 损益类科目能说出几个?
  18. word转pdf后书签目录失效解决方法
  19. 12篇读书笔记系列-4、启功给你讲书法-已读完
  20. 什么是WAP?(转)

热门文章

  1. 使用Google Guava创建收藏和实现不变性
  2. 使用Jackson和Super类型令牌进行Json反序列化
  3. Spring JDBC数据库连接池设置
  4. 改善Java应用程序性能的快速技巧
  5. 如何理解Java的类变量、成员变量、常量、类属性、实例属性、字段(field)、成员方法、类方法
  6. java魔兽猎人_Java基于Swing实现的打猎射击游戏代码
  7. python测试开发实战_《python测试开发实战》基于pytest基础部分实例1-Hello
  8. 双向链表删除节点时间复杂度_「十分钟学算法」删除链表的倒数第N个节点
  9. 机智云代码移植_IoT开发者 | 基于STM32F103的机智云宠物屋外加4路继电器开源教程...
  10. thinkphp6企业项目实战_[MarsZ]ThinkPHP项目实战总结