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

猜你喜欢

转载自blog.csdn.net/wlwdecs_dn/article/details/121347733
今日推荐