win32消息机制

windows操作系统最大的特殊是良好的用户交互性

消息机制:产生消息,传递消息并处理消息的过程

1.产生消息 不可控

1     typedef struct tagMSG
2     {
3     HWND hwnd;//窗口句柄
4     UINT message;//消息id
5     WPARAM wParam;//消息的辅助参数
6     LPARAM lParam;//消息的辅助参数
7     DWORD time;//消息产生的时间
8     POINT pt;//消息产生时鼠标的坐标
9     }     MSG;

2.传递消息(分成两个部分,1、系统传递消息给应用程序 不可控;2.应用程序传递消息给应用程序 可控)

windows操作系统为每一个正在运行的应用程序维护一个消息队列

3.消息处理 可控 吧消息当成条件 ,如何去拿到这个条件

主消息循环: GetMessage是从消息队列中得到消息 如果消息队列没有消息,消息堵塞 等待消息 如果的带了消息,要判断这个消息是否是WM_QUIT消息如果是返回false 如果不是 函数返回true

1     while (GetMessage(&msg, NULL, 0, 0))//从消息队列取消息,取出来放在第1个参数,最后两个参数表示消息的过滤,第3个参数表示的id到第4个参数表示的id这个区间表示的消息id才能被得到,给0,表示不过滤
2     {
3         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))//翻译快捷键
4         {
5             TranslateMessage(&msg);//翻译消息,主要做键盘消息的翻译
6             DispatchMessage(&msg);//投递消息
7         }
8     }

PeekMessage 从消息队列去取得消息,如果消息队列有消息 返回true 没有返回false

 1     ZeroMemory(&msg, sizeof(msg));
 2     while (msg.message != WM_QUIT)
 3     {
 4         if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))//最后一个参数表示从消息队列移除消息
 5         {
 6             if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))//翻译快捷键
 7             {
 8                 TranslateMessage(&msg);//翻译消息,主要做键盘消息的翻译
 9                 DispatchMessage(&msg);//投递消息
10             }
11         }
12         //游戏的画面更新
13         //游戏的数据更新
14     }

处理窗口消息中switch内函数

 1 case WM_LBUTTONDOWN://鼠标左键点击消息
 2     {
 3                             ////SendMessage 可以理解为插队,理解为递归,直接把消息投递给窗口对应的消息处理函数
 4                             //SendMessage(hWnd,//发给哪个窗口
 5                             //    WM_KEYDOWN,//发送的消息id
 6                             //    0, 0);//后两个参数表示这个消息id的辅助信息
 7                             PostMessage(hWnd, WM_KEYDOWN, 0, 0);//理解为排队,把消息直接投递给窗口对应的消息队列,以供下一次得到消息时从消息队列取出
 8                             Sleep(1000);
 9                             hdc = GetDC(hWnd);
10                             TextOut(hdc, 0, 0, _T("button"), 6);
11                             ReleaseDC(hWnd, hdc);
12     }
13         break;
14     case WM_KEYDOWN://键盘按下消息
15     {
16                         Sleep(2000);
17                         hdc = GetDC(hWnd);
18                         TextOut(hdc, 200, 0, _T("keydown"), 7);
19                         ReleaseDC(hWnd, hdc);
20     }
21         break;

原文地址:https://www.cnblogs.com/liugangjiayou/p/11438542.html

时间: 2024-11-06 09:43:37

win32消息机制的相关文章

收藏:Win32消息机制

Dos的过程驱动与Windows的事件驱动 在讲本程序的消息循环之前,我想先谈一下Dos与Windows驱动机制的区别: DOS程序主要使用顺序的,过程驱动的程序设计方法.顺序的,过程驱动的程序有一个明显的开始,明显的过程及一个明显的结束,因此程序能直接控制程序事件或过程的顺序.虽然在顺序的过程驱动的程序中也有很多处理异常的方法,但这样的异常处理也仍然是顺序的,过程驱动的结构. 而Windows的驱动方式是事件驱动,就是不由事件的顺序来控制,而是由事件的发生来控制,所有的事件是无序的,所为一个程

【win32】day04-Win32消息机制

消息机制 过程驱动:程序是按照我们预先定义好的顺序 执行,每执行一步,下一步都已经按照预定的顺序继续执行,直到程序结束. 事件驱动:程序的执行顺序是无序的.某个时间点所执行的代码,是由外界通知.由于我们无法决定用户执行顺序,所以代码的执行也是无序. Win32的消息机制 -事件驱动. Win32消息程序 2.1 Win32窗口注册 2.2 Win32窗口创建 2.3 WIn32消息循环 2.3.1 GetMessage BOOL GetMessage( LPMSG lpMsg,//存放获取到的消

Win32窗口消息机制 x Android消息机制 x 异步执行

如果你开发过Win32窗口程序,那么当你看到android代码到处都有的mHandler.sendEmptyMessage和 private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_REPORT_PRIMARY_CLIP_CHANGED: reportPrimaryClipChanged(); }

Win32消息循环机制等【转载】http://blog.csdn.net/u013777351/article/details/49522219

Dos的过程驱动与Windows的事件驱动 在讲本程序的消息循环之前,我想先谈一下Dos与Windows驱动机制的区别: DOS程序主要使用顺序的,过程驱动的程序设计方法.顺序的,过程驱动的程序有一个明显的开始,明显的过程及一个明显的结束,因此程序能直接控制程序事件或过程的顺序.虽然在顺序的过程驱动的程序中也有很多处理异常的方法,但这样的异常处理也仍然是顺序的,过程驱动的结构. 而Windows的驱动方式是事件驱动,就是不由事件的顺序来控制,而是由事件的发生来控制,所有的事件是无序的,所为一个程

利用消息机制实现VC与Delphi之间的通讯(发送自定义消息)

摘要: 本文介绍了使用Windows消息机制实现由不同语言编制的程序之间的相互通讯.联系,并以当前较为流行的两种语言Microsoft Visual C++ 6.0和Borland delphi 5.0为对象,用这两种语言各编制一应用程序,并能很好的通过消息进行交互. 关键字:vc++.delphi.消息 一. 引言 编制较大型的程序往往需要将一个项目分割成若干个模块,由若干个开发小组共同完成.笔者曾参加过几个大型项目的研发工作,根据需要往往要将项目分为解为几大部分,分到三.四家科研单位共同完成

6.windows的消息机制 重要!重要!重要!

所谓程序执行机制分为: 过程驱动:程序的执行过程总是按照预定好的顺序执行. 事件驱动:程序的执行是无序的,用户可以根据需要随机出发相应的事件. win32窗口程序就是采用事件驱动方式执行,也就是消息机制. 什么是消息? 当系统通知窗口工作时,就采用消息的方式派发给窗口. 消息的组成:(windows平台下消息必须由这6个部分组成) 窗口句柄 消息ID 消息的两个参数(两个附带信息) 消息的产生时间 消息产生时的鼠标位置 DispatchMessage( &nMsg )是怎么派发消息(其实就是调用

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消息机制详解

消息是指什么?      消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用程序某个事情发生了.例如,单击鼠标.改变窗口尺寸.按下键盘上的一个键都会使Windows发送一个消息给应用程序. 消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息.例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标.这个记录类型叫做MSG,MSG含有来

Atitit.事件机制 与 消息机制的联系与区别

1. 消息/事件机制是几乎所有开发语言都有的机制,在某些语言称之为消息(Event),有些地方称之为(Message).1 2. 发布/订阅模式1 3. 事件是侵入式设计,霸占你的主循环:消息是非侵入式设计,将主循环该怎样设计的自由留给用户.1 3.1. 事件越如 框架,消息相像类库2 3.2. 事件比消息封装的更高一层2 4. 消息队列和事件触发的区别,本质是没啥区别的2 5. 事件机制与消息机制2 1. 消息/事件机制是几乎所有开发语言都有的机制,在某些语言称之为消息(Event),有些地方