zoukankan      html  css  js  c++  java
  • 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来实现。

  • 相关阅读:
    nodeType 节点简介
    Hamming Codes
    Preface Numbering(还没好好看USACO的解答)
    位运算常见应用即ACM题优化实例
    Dynamic Programming(动态规划)
    operator new & new operator
    资料记录
    Ordered Fractions
    Healthy Holsteins
    Sorting A ThreeValued Sequence
  • 原文地址:https://www.cnblogs.com/cknightx/p/7123881.html
Copyright © 2011-2022 走看看