• 从不同角度简单阐述消息机制


    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的讲解

  • 相关阅读:
    C++17 filesystem文件系统
    简易版本vue的实现
    javaSE基础04
    javaSE基础03
    javaSE基础02
    JavaSE基础01
    Document对象和window对象
    进程和子进程及端口的常用命令
    vue分页组件二次封装---每页请求特定数据
    css图片垂直水平居中及放大(实现水平垂直居中的效果有哪些方法?)
  • 原文地址:https://www.cnblogs.com/tingshuixuan2012/p/3115936.html
Copyright © 2020-2023  润新知