zoukankan      html  css  js  c++  java
  • 从不同角度简单阐述消息机制

    while (GetMessage (&msg, NULL, 0, 0))
    {
         TranslateMessage (&msg) ;
         DispatchMessage (&msg) ;
    }

    这是WinMain函数中典型的消息循环。GetMessage函数从消息队列中取出下一条消息,填入msg结构字段。DispatchMessage函数调用此窗口的消息过程。

      在这两个函数之间是Translate函数,它负责把击键消息转换为字符消息。

                    ——以上内容摘自《Windows程序设计》189页

    _________________________________________________________________________

    《Windows程序设计》第54页有下面几段话:

    【下面的语句将msg结构返还给Windows以进行某些键盘消息的转换:

    TranslateMessage (&msg) ;

    而以下语句则讲msg结构在此返还给Windows:

    DispatchMessage (&msg) ;

    接下来,Windows会将这条消息发送给合适的窗口过程来处理。】

    【窗口过程总是按照如下方式来定义:

    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

    窗口过程的四个参数与MSG结构的前四个字段是一一对应的。第一个参数是hwnd,表示接收消息的窗口的句柄。

    第二个参数与MSG结构的message字段对应,是一个标识消息的数字。

    最后两个参数是32位的消息参数,用于提供该消息的更丰富信息。这些参数中所包含的内容依赖于具体的消息类型。

    从上面摘录的最后一段可以得出,平时用到的wParam和lParam是结构MSG的成员,与MSG的message成组出现,用于“提供该消息的更丰富信息”。

       理解了这些,对理解整个消息机制有极大帮助。 

     58~61页的《Windows编程中的若干难点》对消息机制做了更多的阐述,至此,消息机制可以告一段落。注意59页底部对DefWindowProc的讲解

  • 相关阅读:
    容斥原理算法总结(bzoj 2986 2839)
    网络流系列算法总结(bzoj 3438 1061)
    bzoj 2746: [HEOI2012]旅行问题 AC自动机fail树
    bzoj 3283: 运算器 扩展Baby Step Giant Step && 快速阶乘
    计算几何考场绘图技巧
    bzoj 1845: [Cqoi2005] 三角形面积并 扫描线
    bzoj 3784: 树上的路径 堆维护第k大
    BZOJ 1231: [Usaco2008 Nov]mixup2 混乱的奶牛
    BZOJ 1112: [POI2008]砖块Klo
    BZOJ 1003: [ZJOI2006]物流运输trans DP+最短路
  • 原文地址:https://www.cnblogs.com/tingshuixuan2012/p/3115936.html
Copyright © 2011-2022 走看看