现在的位置: 首页 > 综合 > 正文

从零开始WindowsAPI编程—Windows消息的处理机制

2013年10月09日 ⁄ 综合 ⁄ 共 603字 ⁄ 字号 评论关闭
必须注意的几点:

1. 消息的处理方式
   Windows系统对消息有两种处理方式:一是直接用消息作为参数调用WndProc;二是把消息加入消息队列。
所以无论是GetMessage()还是PeekMessage()都不可能接收到所有的消息,而只能接收到被放到消息队列里
的消息。Windows系统可以在任何时候调用WndProc()而不必程序请求。例如:CreateWindow()的时候会用
WM_CREATE消息调用WndProc....

当然DispatchMessage()的请求也会使得Windows系统调用WndProc. 而且Dispatch()在消息处理完成之前不会返回。

2. 关于WM_PAINT消息
当窗口无效时系统向窗口的消息队列加入WM_PAINT消息。此消息必须被处理,并且处理后把窗口Validate,否则该消息
在队列中无法消除,从而导致程序一直在GetMessage(WM_PAINT), WndProc(WM_PAINT),.....。另一种解决方法是
让DefWindowProc()处理WM_PAINT消息,使得窗口Validated.

3.关于DefWindowProc()
此函数必不可少,它会自动处理某些消息,而这些消息如果不正确处理会导致程序不正常。

4.关于WM_DESTROY消息
此消息必须有程序员自己处理,一般是PostQuitMessage(0);否则创口被销毁了,而程序仍在运行。

抱歉!评论已关闭.