ITPub博客

首页 > Linux操作系统 > Linux操作系统 > WIN32 SDK补课:重新认识窗口过程和消息循环

WIN32 SDK补课:重新认识窗口过程和消息循环

原创 Linux操作系统 作者:davidyu720 时间:2019-03-14 14:42:05 0 删除 编辑

问题的提出:

纯WIN32 SDK编码下,有些地方要用到窗口收发消息。为了创建一个窗口,需要提供窗口过程、注册窗口类,然后才能创建窗口并编写消息循环的驱动代码。
不想把代码搞复杂,于是经常省略窗口过程,直接使用系统已有的"STATIC"窗口类创建窗口,然后写一个简单的 GetMessage() 循环来获取窗口消息。可是发现循环代码中无论如何也不能得到WM_CREATE等等消息!

原因:

WM_CREATE WM_CLOSE WM_DESTROY WM_NCDESTROY 这些消息必须用 GetMessage() 消息驱动代码 配合 窗口过程 才能得到处理!当 GetMessage() 等待消息时,如果有这些Nonqueued Messages到达,内核会自动调用窗口过程进行处理,而不会使GetMessage()返回这些消息!也就是 GetMessage() 只会返回 Post 的消息。

[@more@]

如果还是想省事,可以使用"STATIC"窗口类,并结合subclass技术。这样可以不用注册窗口类,但还是需要提供一个窗口过程处理感兴趣的消息。

HWND hWnd = CreateWindow("STATIC", ...);
WNDPROC wpOrigStaticProc = (WNDPROC)SetWindowLong(hWnd, GWL_WNDPROC, (LONG)MyMainWndProc);

default:
return CallWindowProc(wpOrigStaticProc, hwnd, uMsg, wParam, lParam);

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9844649/viewspace-1023443/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-08-18

  • 博文量
    234
  • 访问量
    246418