假设我有一个从 CWnd 派生的具有事件处理函数的类OnPaint
,OnCreate
并且OnSize
。如您所知,所有这些都是在窗口启动时发生的,但我想看看它们之间的顺序是什么。
例如,当我在其中一个中设置断点时,在结束函数后,控件不会传递给另一个,而是转到 MFC 的内置 .cpp 文件之一wincore.cpp
?
我如何理解订单?任何链接或教我一种方法来防止控件进入 MFC 内置类?
问问题
2395 次
1 回答
5
消息到达的顺序没有完全定义和记录。但是,某些消息相对于其他消息是有序的。MSDN 明确声明WM_NCCREATE
在WM_CREATE
. 就订单而言,文档WM_CREATE
还有一些提示(强调我的):
CreateWindowEx
当应用程序通过调用orCreateWindow
函数请求创建窗口时发送。(该消息在函数返回之前发送。)新窗口的窗口过程在窗口创建后、窗口变为可见之前收到该消息。
应该立即清楚,必须存在一个窗口才能接收附加消息。因此,第一个WM_SIZE
将在 之后发送WM_CREATE
。至于WM_PAINT
它要求一个窗口是可见的。另外,它是一个低优先级的消息,只有在消息队列为空时才会生成。
在窗口创建期间,顺序是WM_CREATE
, WM_SIZE
, WM_PAINT
。
如果您只对观察消息感兴趣,您可以使用 Visual Studio 附带的 Spy++ (spyxx.exe) 等工具。它可以记录任意消息并为您提供详细信息。如果这是出于教育目的(而不是推断行为),它是一个非常有用的工具。
投票者注意事项:如果您认为此答案不准确或需要改进,请留言以帮助未来的访客。
于 2013-08-15T18:33:22.977 回答