• Windows运行机理——消息与消息队列


    Windows运行机理这系列文章都是来至于《零基础学Qt4编程》——吴迪,个人觉得写得很好,所以进行了搬运和个人加工

    Windows程序设计时一种基于消息的时机驱动方式的设计模式,完全不同于传动的DOS方式的程序设计方法,在Windows中,编程的框架都是响应和发送消息。例如,当用户在窗口中画图的时候,按下鼠标左键,此时操作系统会感知这一事件,于是将这个事件包装成一个消息,投递到应用程序的消息队列中,然后应用程序从消息队列中取出消息并响应,在这处理过程中,操作系统也给应用系统发送消息,所谓的“发送消息”,实际上是操作系统调用程序中一个专门处理消息的函数,称为窗口过程。

    1. 消息

    在windows 程序中,消息是由MSG 结构体来表示的。MSG 结构体的定义如下:

    typedef struct tagMSG
    {
    HWND hwnd;
    UINT message;
    WPARAM wParam;
    LPARAM lParam;
    DWORD time;
    POINT pt;
    }MSG;

    该结构体中各成员变量的含义如下:

    hwnd 表示消息所属的窗口。我们开发的程序都是窗口应用程序,消息一般都是与某个
    窗口相关联的。在Windows 程序中,用HWND 类型的变量来标识窗口。
    message 变量指定了消息的标识符。在Windows 中,消息是由一个数值来表示的,不同
    的消息对应不同的数值。但是由于数值不便于记忆,所以Windows 将消息对应的数值定义
    为WM_XXX 宏(WM 是Window Message 的缩写)的形式,XXX 对应某种消息的英文拼写的大
    写形式。例如,鼠标左键按下的消息是WM_LBUTTONDOWN,键盘按下消息是WM_KEYDOWN,字
    符消息是WM_CHAR 等等。在程序中,我们通常都是用WM_XXX 宏的形式来使用消息的。
    此外,我们可以定义自己的消息,并给窗口发送这些消息,您完全不用担心如何使这
    些消息与代码联系起来,因为这是应用程序框架的事情。但是另一方面,这也在一定程度上
    固定了程序设计上的一些结构。
    wParam 和lParam 用于指定消息的其他附加信息。比如,当我们收到一个字符消息的时
    候,message 成员变量的值就是WM_CHAR,但用户输入的是那些字符,就由wParam 和
    lParam 来说明。wParam、lParam 表示的信息随消息的不同而有变化。

    time 和pt 分别表示消息投递到消息队列的时间和鼠标的当前位置。

    2. 消息队列

    每一个Windows 应用程序开始执行后,系统都会为该程序创建一个消息队列,这个消
    息队列用来存放该程序创建的窗口的消息。Windows 将产生的消息依次放入消息队列中,而
    应用程序则通过消息循环不断从队列中取出消息,进行响应。这种消息机制,就是Windows

    程序运行的基本机制。

  • 相关阅读:
    【Android】ContentValues的用法
    【Android】Android处理Home键方法小结
    【Android】spannableStringBuilder
    【Android】Android 4.0 Launcher2源码分析——启动过程分析
    【Android】android文件的写入与读取---简单的文本读写context.openFileInput() context.openFileOutput()
    【Android】Android取消EditText自动获取焦点
    android在view.requestFocus(0)返回false的解决办法
    Android中创建倒影效果的工具类
    android布局layout中的一些属性
    android中巧妙更改spinner、AutoCompleteTextView分割线的颜色值(spinner AutoCompleteTextView divider color)
  • 原文地址:https://www.cnblogs.com/DreamDog/p/9159980.html
Copyright © 2020-2023  润新知