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

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

第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消息映射种类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无状态会话的ejb_Java EE状态会话Bean(EJB)示例

无状态会话的ejb在本文中,我们将了解如何在简单的Web应用程序中使用状态会话Bean来跟踪客户端会话中的状态。 1.简介 有状态会话Bean通常保存有关特定客户端会话的信息,并在整个会话中保留该信息(与无状态会话Bean相对)。 有状态…

ArrayList源码学习笔记(3)

时隔两年&#xff0c;重新读ArrayList源码&#xff0c;轻松了很多&#xff0c;以问题的方式记录一下收获 装饰器模式 注释中提到ArrayList本身不是线程安全的&#xff0c;注释如下&#xff1a; * <p><strong>Note that this implementation is not synchronized.&…

【MFC系列-第10天】非模式对话框开发

10.1 程序左上角图标设置 通过SendMessage发送WM_SETICON消息来设置 10.2 纯Win32程序开发和技巧&#xff08;借助MFC源码&#xff09; 10.3 非模式对话框的调用 a)调用CDialog::Create函数来创建&#xff0c;并且调用ShowWindow来显示&#xff1b; b)单例模式每次判断句柄…

Maven教程之春

1.简介 在本文中&#xff0c;我们将演示如何针对非常特定的用例对Spring使用Maven依赖项。 我们使用的所有库的最新版本都可以在Maven Central上找到。 对于一个有效的构建周期而言&#xff0c;了解Maven依赖项的工作方式以及如何对其进行管理非常重要&#xff0c;并且对于在我…

【MFC系列-第11天】CWinApp类成员分析

11.1 资源管理器开发&#xff08;C语言&#xff09; 三种位运算 //#include <AtlBase.h> //混合 c_file.attrib | _A_HIDDEN|_A_RDONLY; //判断使用if(c_file.attrib & _A_HIDDEN) //删除属性c_file.attrib&~_A_HIDDENT;11.2 资源管理器开发&#xff08;API&a…

【MFC系列-第12天】Windows系统对话框

12.1 INI配置文件 UINT GetProfileInt( LPCTSTR lpszSection, LPCTSTR lpszEntry, int nDefault ); 从应用程序的配置文件&#xff08;.INI&#xff09;的一个配置项中获取一个整数 CString GetProfileString(LPCTSTR szSection, LPCTSTR szEntry, LPCTSTR szDefault NULL )…

【BCH码2】BCH码的快速BM迭代译码原理详解及MATLAB实现(不使用MATLAB库函数【全部代码需私信另外付费获取】)

理论基础 订阅《信道编码》专栏,首先查阅各子程序的详解 【有限域生成】本原多项式生成有限域的原理及MATLAB实现 【有限域除法】二元多项式除法电路原理及MATLAB详解 【有限域元素加法和乘法】有限域元素加法和乘法的原理及MATLAB实现 【多元域乘法】多项式乘法电路原理…

【MFC系列-第13天】Windows系统对话框(对话框记事本逻辑)

13.1 内存泄露问题 真正的内存泄露是有循环性反复申请而不释放内存&#xff1a;是指在软件运行时&#xff0c;比如点一下某按钮就申请一次堆空间&#xff0c;而在下次申请前或者适当的时机及时释放内存&#xff1b; Detected memory leaks! Dumping objects -> {225} norm…

js 实现轻量ps_简单轻量的池实现

js 实现轻量ps对象池是包含指定数量的对象的容器。 从池中获取对象时&#xff0c;在将对象放回之前&#xff0c;该对象在池中不可用。 池中的对象具有生命周期&#xff1a;创建&#xff0c;验证&#xff0c;销毁等。池有助于更好地管理可用资源。 有许多使用示例。 特别是在应用…

【MFC系列-第14天】MFC核心类库的成员介绍(记事本快捷键)

14.1 对话框快捷键的设置和加载 a) 插入一个新的Accelerator到资源里&#xff0c;把加速键和对应的响应控件(如一个按钮)关联 b) 在对话框头文件中声明 HACCEL m_hAccel;c) 在对话框的构造函数里初始化m_hAccel m_hAccel ::LoadAccelerators(AfxGetInstanceHandle(),MAKEI…

【MFC系列-第15天】关联变量的概念与用法

15.1 权限管理对话框的信息录入与保存 15.2 控件型关联变量&#xff1a; FromHandle和DeleteTempMap管理成员对象表&#xff0c;前者由HWND获取CWnd*&#xff0c;后者进行删除。 BOOL Attach( HWND hWndNew ); //关联 HWND Detach( ); //解除关联 BOOL SubclassWindow( HWND…

【MFC系列-第16天】企业信息管理软件开发

常见的两种类和类之间相互调用的方法。 16.1 用户权限信息在不同对话框之间共享 ①在CWokerApp类中定义变量&#xff1a; class CWorkerApp : public CWinApp { public:CWorkerApp();SAdmin m_admin;//登录信息 // 重写 public:virtual BOOL InitInstance(); // 实现DECLARE…

java微妙_编码Java时的10个微妙的最佳实践

java微妙这是10条最佳实践的列表&#xff0c;这些最佳实践比您的平均Josh Bloch有效Java规则要微妙得多。 尽管Josh Bloch的列表很容易学习&#xff0c;并且涉及日常情况&#xff0c;但此处的列表包含了涉及API / SPI设计的较不常见的情况&#xff0c;尽管这些情况可能会产生很…

【MFC系列-第17天】企业信息管理软件开发

关注公号【逆向通信猿】更精彩&#xff01;&#xff01;&#xff01; 17.1 数值型关联变量&#xff1a; a)在MFC中有部分控件支持数值型关联变量&#xff1a; 编辑控件、下拉控件、单选按钮、复选框以及日期控件&#xff1b; b)在类向导中为控件建立关联变量时&#xff0c;选…

GraphQL在Wildfly群上

“ GraphQL是API的查询语言&#xff0c;是用于使用现有数据完成这些查询的运行时。 GraphQL为您的API中的数据提供了一个完整且易于理解的描述&#xff0c;使客户能够准确地询问他们所需的内容&#xff0c;仅此而已&#xff0c;使随着时间的推移更容易开发API并启用强大的开发人…

【MFC系列-第18天】企业信息管理软件开发

关注公号【逆向通信猿】更精彩&#xff01;&#xff01;&#xff01; CWnd类中常用的成员函数 函数名称含义static CWnd* PASCAL GetActiveWindow( )&#xff08;进程内的&#xff09;获取活动窗口CWnd* SetActiveWindow( )&#xff08;进程内的&#xff09;将一个窗口设置为…

【MFC系列-第19天】初步认识GDI绘图技术

WM_PAINT消息测试 调试输出字符串 OutputDebugSting(_T(“WM_PAINT-OnPaint\n”));1、WM_PAINT&#xff1a;功能和发生时间 2、BeginPaint和EndPaint必须成对使用。 a)BeginPaint返回的DC句柄&#xff0c;是基于关联的窗口客户区坐标系绘图 b)MFC把这两个函数封装为一个类…

javafx 示例_示例介绍:JavaFX 8打印

javafx 示例我有一段时间没有写博客了&#xff0c;我想与其他人分享有关JavaFX的所有信息&#xff08;我的日常工作和家庭可能是借口&#xff09;。 对于那些对此博客不熟悉的人 &#xff0c;我是JavaFX 2 Introduction by Example&#xff08;JIBE&#xff09;的作者&#xff…

【MFC系列-第20天】CDC绘图类成员介绍

20.1 三大坐标系&#xff1a;屏幕、客户区和非客户区 20.2 三大派生类&#xff1a; a)CPaintDC(客户区标准绘图&#xff09;,内部封装函数是&#xff1a;BeginPaint和EndPaint b)CClientDC&#xff08;客户区非标准绘图&#xff09;,内部是&#xff1a;::GetDC和ReleaseDC …

Spring Data JPA教程

在Java类或对象与关系数据库之间管理数据是一项非常繁琐且棘手的任务。 DAO层通常包含许多样板代码&#xff0c;应简化这些样板代码&#xff0c;以减少代码行数并使代码可重复使用。 在本教程中&#xff0c;我们将讨论Spring数据的JPA实现。 1.简介 1.1什么是JPA&#xff1f;…