windows消息机制

一. windows消息机制处理流程

(1)windows会为每一个正在执行的windows应用程序建立一个消息队列,即应用程序队列,用来存放该程序可能创建的各种窗口的消息。

当应用程序发生事件后,windows将事件转化为消息并将消息放入应用程序的消息队列中。

(2)应用程序通过GetMessage从消息队列中检索事件消息并把他们分发到相应窗口的消息处理函数中。

while(GetMessage(&msg, NULL, 0, 0))
{
    // 将虚拟键消息转换为字符消息
    TranslateMessage(&msg);   

    // 将msg结构回传给windows然后windows将
    // 该消息发送到适当的窗口消息处理函数
    DispatchMessage(&msg);
}

二. windows消息机制要点

(1)窗口过程

每个窗口会有一个称为窗口过程的回调函数(WndProc),当窗口收到消息时系统就回调用此窗口过程来处理消息

(2)消息类型

消息类型分为系统定义消息(窗口消息、命令消息、控件通知消息)和用户自定义消息

a. 窗口消息:与窗口的内部运作有关,如窗口创建、绘制、显示、销毁等

b. 命令消息:与处理用户请求有关,如单击菜单项或工具栏或控件等

c. 控件通知:WM_NOTIFY消息,最灵活的消息格式

d. 用户自定义消息WM_USER + 100(习惯性)

(3)消息队列

a. 系统消息队列

b. 线程消息队列:每一个GUI线程都会维护这样一个线程消息队列。这个队列只有在线程调用GDI函数时才会创建,默认部创建

然后线程消息队列中的消息会被送到相应的窗口过程处理。

注意:线程消息队列中的WM_PAINT、WM_TIME只有在Queue中没有其他消息时才会被处理

时间: 2024-10-11 01:58:40

windows消息机制的相关文章

(转载)Windows消息机制

文章出处:http://www.cnblogs.com/watsonyin/archive/2005/12/12/295536.html Windows消息机制 Windows操作系统最大的特点就是其图形化的操作界面,其图形化界面是建立在其消息处理机制这个基础之上的.如果不理解Windows消息处理机制,肯定无法深入的理解Windows编程.可惜很多程序员对Windows消息只是略有所闻,对其使用知之甚少,更不了解其内部实现原理,本文试着一步一步向大家披露我理解的Windows消息机制.可以说,

Windows 消息机制

Windows 消息机制 Windows是一个消息驱动的操作系统. 如绘制窗体的消息 WM_PAINT. 结构体定义: 消息分类-发送途径 队列消息. Windows为每一个执行中的程序维护一个消息队列.由应用程序自己取出,如WM_TIMER. 非队列消息. 此类消息来自特定的Windows函数,如UpdateWindow()函数直接向窗体处理函数发送WM_PAINT重绘消息. 消息分类-发送者 系统消息.是提前定义的UINT常量. 用户消息. 通过RegisterWindowMessage()

windows消息机制(MFC)

windows消息机制(MFC) 消息分类与消息队列 Windows中,消息使用统一的结构体(MSG)来存放信息,其中message表明消息的具体的类型, 而wParam,lParam是其最灵活的两个变量,为不同的消息类型时,存放数据的含义也不一样. time表示产生消息的时间,pt表示产生消息时鼠标的位置. 按照类型,Windows将消息分为: (0) 消息ID范围 系统定义消息ID范围:[0x0000, 0x03ff]用户自定义的消息ID范围: WM_USER: 0x0400-0x7FFF 

005 windows消息机制

#windows消息机制 新建第一个Win32应用程序 VS2015 新建项目 Win32应用程序 // Win32WindowDemo.cpp : 定义应用程序的入口点. // #include "stdafx.h" #include "Win32WindowDemo.h" #define MAX_LOADSTRING 100 // 全局变量: HINSTANCE hInst; // 当前实例 WCHAR szTitle[MAX_LOADSTRING]; // 标

收藏:Windows消息机制

百度百科介绍的windows消息机制也不错:http://baike.baidu.com/view/672379.htm Windows的应用程序一般包含窗口(Window),它主要为用户提供一种可视化的交互方式,窗口是由线程(Thread)创建的.Windows系统通过消息机制来管理交互,消息(Message)被发送,保存,处理,一个线程会维护自己的一套消息队列(Message Queue),以保持线程间的独占性.队列的特点无非是先进先出,这种机制可以实现一种异步的需求响应过程. 消息的是什么

从0 开始 WPF MVVM 企业级框架实现与说明 ---- 第一讲 WPF中 windows消息机制

谈到桌面应用程序,我们第一反应就是它的消息机制是怎么处理的,那么我们就先聊聊这个windows消息机制 谈起“消息机制”这个词,我们都会想到Windows的消息机制,系统将键盘鼠标的行为包装成一个Windows Message,然后系统主动将这些Windows Message派发给特定的窗口,实际上消息是被Post到特定窗口所在线程的消息队列,应用程序的消息循环再不断的从消息队列当中获取消息,然后再派发给特定窗口类的窗口过程来处理,在窗口过程中完成一次用户交互. 其实,WPF的底层也是基于Win

深入Delphi -- Windows 消息机制

http://www.txsz.net/xs/delphi/3/Windows%20%E6%B6%88%E6%81%AF%E6%9C%BA%E5%88%B6.htm Windows 消息机制 by machine 大家是不是很奇怪为什么我还没说到Delphi的控件呢? 不过不用着急,有关深入控件的内容,将会很快出现了,但在这之前, 还得了解Windows图形界面程序的机制--Windows的消息机制. 使用过Delphi的朋友都知道,Delphi是一个真正面向对象的编程环境, 但是不但如此,De

Windows消息机制驱动的客户端程序GetMssage()

要从消息队列中取出消息,我们需要调用GetMessage()函数,该函数的原型声明如下: BOOL GetMessage( LPMSG lpMsg,              // address of structure with message HWND hWnd,                 // handle of window UINT wMsgFilterMin,       // first message UINT wMsgFilterMax        // last m

Windows消息机制(转)1

Windows的应用程序一般包含窗口(Window),它主要为用户提供一种可视化的交互方式,窗口是总是在某个线程(Thread)内创建的.Windows系统通过消息机制来管理交互,消息(Message)被发送,保存,处理,一个线程会维护自己的一套消息队列(Message Queue),以保持线程间的独占性.队列的特点无非是先进先出,这种机制可以实现一种异步的需求响应过程. PS 常见的错误的理解: 1) 每个窗口有自己的消息队列 (我加的) 消息的是什么样子的? 消息由一个叫MSG的结构体定义,