VC中WM_CREATE、WM_INITDIALOG消息出现顺序及调用方式

上传人:豆浆 文档编号:11361964 上传时间:2017-09-02 格式:PDF 页数:7 大小:130.03KB
返回 下载 相关 举报
VC中WM_CREATE、WM_INITDIALOG消息出现顺序及调用方式_第1页
第1页 / 共7页
VC中WM_CREATE、WM_INITDIALOG消息出现顺序及调用方式_第2页
第2页 / 共7页
VC中WM_CREATE、WM_INITDIALOG消息出现顺序及调用方式_第3页
第3页 / 共7页
VC中WM_CREATE、WM_INITDIALOG消息出现顺序及调用方式_第4页
第4页 / 共7页
VC中WM_CREATE、WM_INITDIALOG消息出现顺序及调用方式_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《VC中WM_CREATE、WM_INITDIALOG消息出现顺序及调用方式》由会员分享,可在线阅读,更多相关《VC中WM_CREATE、WM_INITDIALOG消息出现顺序及调用方式(7页珍藏版)》请在金锄头文库上搜索。

1、VC中WM_CREATE、WM_INITDIALOG消息出现顺序及调用方式 2012.7 wxleasyland试验: VC建的标准WIN32HELLO WORLD程序中: 1. 在 CreateWindow() 前面加上语句 WinExec(cmd /k echo now call CreateWindow(),SW_SHOW); Sleep(5000); 2.在 CreateWindow()后面加上语句 WinExec(cmd /k echo CreateWindow() RETURN,SW_SHOW); 3.在WndProc()中加上 case WM_CREATE: WinExec(c

2、md /k echo WndProc(): WM_CREATE: appear!,SW_SHOW); Sleep(5000); break; 4.运行,发现,先出现now call CreateWindow()、再WndProc(): WM_CREATE: appear!、最后CreateWindow() RETURN。 结论: CreateWindow()是在运行后、返回前,发送消息WM_CREATE,并阻塞! WM_CREATE 消息直接发给消息处理函数 WndProc()执行!而不是通过消息队列(GetMessage、DispatchMessage等)! 其实就是CreateWindow

3、()直接拿消息WM_CREATE去调用WndProc()! 如果WndProc()返回0,CreateWindow()正常返回hWnd。 如果WndProc()返回-1,CreateWindow()销毁窗口,并返回NULL。 所以 WM_CREATE 时,CreateWindow()内部已经创建好窗口了,但还没有返回,还没有hWnd!即窗口真正还没有创建结束。这时这里不能有对窗口上的控件操作的函数,不然就会“程序执行了非法操作”。比如GetDlgItem等。 标准WIN32程序中,是先RegisterClassEx()注册窗口类再CreateWindow()创建窗口再ShowWindow()显

4、示出窗口再UpdateWindow()立即用WM_PAINT刷新窗口再LoadAccelerators()再进入消息循环(GetMessage、DispatchMessage等) 在MFC对话框中,试验,是:先 WM_CREATE,这时窗口未显示出来再WM_INITDIALOG,这时窗口仍未显示出来 OnInitDialog()运行完毕后,窗口才显示出来(应是默认通过ShowWindow())。 h p:/msdn.microso .com/en-us/library/windows/desktop/ms632619(v=vs.85).aspx WM_CREATE message Sent w

5、hen an application requests that a window be created by calling the CreateWindowEx or CreateWindow function. (The message is sent before the function returns.这个消息在函数返回前被发送) The window procedure of the new window receives this message after the window is created, but before the window becomes visible

6、. A window receives this message through its WindowProc function. 窗口通过WindowProc函数来接收这个消息! If an application processes this message, it should return zero to continue creation of the window. If the application returns 1, the window is destroyed and the CreateWindowEx or CreateWindow function returns

7、 a NULL handle. 处理这个消息的程序应返回0,如果返回1,则窗口被销毁并且CreateWindow返回NULL。 CreateWindow function Creates an overlapped, pop-up, or child window. It specifies the window class, window title, window style, and (optionally) the initial position and size of the window. The function also specifies the windows paren

8、t or owner, if any, and the windows menu. Before returning, CreateWindow sends a WM_CREATE message to the window procedure. 在CreateWindow返回前,它会发送WM_CREATE给窗口处理程序。 For overlapped, pop-up, and child windows, CreateWindow sends WM_CREATE, WM_GETMINMAXINFO, and WM_NCCREATE messages to the window. The lP

9、aram parameter of theWM_CREATE message contains a pointer to a CREATESTRUCT structure. If the WS_VISIBLE style is specified, CreateWindow sends the window all the messages required to activate and show the window. WM_NCCREATE message Sent prior to the WM_CREATE message when a window is first created

10、. 在WM_CREATE之前被发送。 A window receives this message through its WindowProc function. 窗口通过WindowProc函数来接收这个消息! If an application processes this message, it should return TRUE to continue creation of the window. If the application returns FALSE, theCreateWindow or CreateWindowEx function will return a N

11、ULL handle. 引用网络上的: UpdateWindow UpdateWindow()立即用WM_PAINT刷新窗口。WM_PAINT消息并不是一直发的,一般在窗口遮住后再显示时系统自动发,而且它的优先级很低,只有在别的消息处理完后才处理;UpdateWindow给指定窗口的窗口过程发送一个WM_PAINT消息并立即执行(不经过消息队列),如果更新区域为空,则不发送消息。 WM_CREATE & WM_INITDIALOG WM_CREATE 是所有窗口都能响应的消息,表明本窗口已经创建完毕.可以安全的使用这个窗口了,例如在它上面画控件等等.这个状态肯定是在调用 ShowWindows

12、()显示窗口之前. WM_WM_INITDIALOG是对话框才能收到的消息,表明对话框及其所有子控件都创建完毕了,这个状态肯定是调用显示对话框的函数之前.所以可以在 WM_WM_INITDIALOG 对控件进行一些修改等. - nvneibaba_069 - 初级水手长 七级 不要被MFC干扰了,MFC封装了太多的东西,心里想着API的执行顺序就行了。 所有窗口都是在注册窗口类之后调用CreateWindowEx来创建的,创建成功之后(HWND有效但CreateWindowEx尚未返回)系统自动发送WM_CREATE消息,所以你的OnCreate将被执行,在这里窗口已经创建成功了,你可以安全地

13、创建各种子窗口。 - h p:/ WM_CREATE消息响应函数和WM_INITDIALOG消息响应函数之区别 在响应WM_CREATE消息响应函数的时候,对话框及子控件还未创建完成,亦是说只是通知系统说要开始创建窗口啦,这个消息响应完之后,对话框和子控件才开始创建。因此在此消息响应函数中无法对控件进行修改和初始化。 而WM_INITDIALOG 消息响应函数是在程序运行时,当其对话框和子控件全部创建完毕,将要显示内容的时候发送的消息。因此可以在WM_INITDIALOG 消息响应函数中添加对编辑框控件的初始化和修改。 - WM_CREATE消息用来产生子窗口控件,WM_CREATE是谁发出的

14、,什么意思? 当然是windows操作系统发出,所有消息都是由操作系统发出给程序的,分成进队消息,和不进队消息,wm_create不仅仅指子窗口产生,所有窗口在操作系统内部产生时,windows都会发出这个消息 - 应用程序中处理消息的顺序(转) MFC应用程序中处理消息的顺序 1.AfxWndProc() 该函数负责接收消息,找到消息所属的 CWnd 对象,然后调用AfxCallWndProc 2.AfxCallWndProc() 该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数 3.WindowProc() 该函数负责发送消

15、息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数 4.OnWndMsg() 该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息 调用OnNo fy() 消息响应函数。任何被遗漏的消息将是一个窗口消息。OnWndMsg()函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。如果OnWndMsg()函数不能找到这样的处理函数的话,则把消息返回到WindowProc()函数,由它将消息发送给DefWindowProc()函数 5.OnCommand() 该函数查看这是不是一个控件通知(lParam参数不为NULL,如果lParam 参数为空的话,说明该消息不是控件通知),如果它是,OnCommand()函数会试图将消息映射到制造通知的控件;如果他不是一个控件通知(或者如果控件拒绝映射的消息)OnCommand()就会调用OnCmdMsg()函数 nt

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号