• Windows消息循环


    首先理解一句话:“Windows”向应用程序发送了一条消息。这里是指Windows调用了该程序内部的一个函数。

    当UpdateWindow被调用后,新建的窗口在屏幕便完全可见了。此时,Windows会为其维护一个消息队列。当事件发生时,Windows会自动将这些事件转化为消息,并将其放置在应用程序的消息队列中。

    应用程序通过消息循环来获取消息:

    while (GetMessage(&msg, NULL, 0, 0))    //从消息队列中获取消息并放在msg结构中  
        {
            TranslateMessage(&msg);     //将虚拟键消息转换为字符消息  
            DispatchMessage(&msg);      //调度一个消息给窗口程序  
        }

    在消息循环中,应用程序将获取到的消息返还给Windows,接下来,Windows会将这条消息发送给合适的窗口过程即WndProc来处理:

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_CREATE:
            ...
            return 0;
    
          ... ...
    
    
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        }
        return DefWindowProc(hwnd, message, wParam, lParam);//不进行处理的消息传给此函数
    }        

    综上,窗口过程是由Windows来调用的,即当从消息队列中取出消息并递交给Windows后,Windows把消息内容作为参数,回调给其发送消息的窗口的窗口过程。

    注:应用程序如果希望调用自身的窗口过程,则可通过函数SendMessage来实现。

  • 相关阅读:
    Docker系列二:Docker的基本结构
    Codeforces 1013
    树形结构升级
    Codeforces 402 and 403 (Div. 2 and 1)
    Codeforces 342
    图论基础
    树形结构基础
    Codeforces 788 (Div. 1)
    NOIP/CSP-J/S初赛集锦
    树的重心
  • 原文地址:https://www.cnblogs.com/cknightx/p/7123881.html
Copyright © 2020-2023  润新知