win32编程 -- 消息机制(二)

简介: win32编程 -- 消息机制(二)

一、消息的获取


1、GetMessage:从系统获取消息,将消息从系统中移除,阻塞函数。当系统无消息时,GetMessage会等候下一条消息。


2、PeekMessage - 以查看的方式从系统获取消息,可以不将消息从系统移除,非阻塞函数。当系统无消息时,返回FALSE,继续执行后续代码。


BOOL PeekMessage(
       LPMSG lpMsg,                 // 消息信息
       HWND hWnd,            // 消息句柄
       UINT wMsgFilterMin,  // 消息范围
       UINT wMsgFilterMax,  // 消息范围
       UINT wRemoveMsg      //移除标识  
       PM_REMOVE / PM_NOREMOVE
);

3、相关代码


void Message()
{
       MSG nMsg = { 0 };
       /*while (GetMessage(&nMsg, NULL, 0, 0))
       {
              TranslateMessage(&nMsg);
              DispatchMessage(&nMsg);
       }*/
       while (true)
       {
              if (PeekMessage(&nMsg,NULL,0,0,PM_NOREMOVE))
              {
                     //有消息
                     if (GetMessage(&nMsg, NULL, 0, 0))
                     {
                           //不是WM_QUIT
                           TranslateMessage(&nMsg);
                           DispatchMessage(&nMsg);
                     }
                     else
                     {//是WM_QUIT
                           return;
                     }
                     ;
              }//没有消息
              else
              {
                     //空闲处理
                     WriteConsole(g_接受句柄, L"哎呦", 6, NULL, NULL);;
              }
       }
}


二、消息的发送


1、SendMessage:发送消息,会等候消息处理的结果。


2、PostMessage:投递消息,消息发出后立刻返回,不等候消息执行结果。


WM_QUIT用到的就是这个

BOOL SendMessage / PostMessage(
       HWND hWnd,           //消息发送的目的窗口
       UINT Msg,                  //消息ID
       WPARAM wParam,       //消息参数
       LPARAM lParam               //消息参数          
);


三、消息的分类


1、系统消息:ID范围 0 - 0x03FF,由系统定义好的消息,可以在程序中直接使用。


2、 用户自定义消息:ID范围 0x0400 - 0x7FFF,由用户自己定义,满足用户自己的需求。由用户自己发出消息,并响应处理,自定义消息可以任何位置发送


自定义消息宏:WM_USER    


#define WM_MYMESSAGE WM_USER+n


3、应用程序消息 - ID范围 0x8000 - 0xBFFF,程序之间通讯时使用的消息。,应用程序消息宏:WM_APP


4、系统注册消息 - ID范围 0xC000 - 0xFFFF,在系统注册并生成相应消息,然后可以在各个程序中使用这个消息。


5、相关代码

//定义消息宏
#define WM_MYMESSAGE WM_USER+1001
//发送消息
SendMessage(hWnd, WM_MYMESSAGE, 100, 200);//窗口之前就出来
//PostMessage(hWnd, WM_MYMESSAGE, 100, 200);//窗口之后才出来
//消息处理内容
void 自定义消息(HWND hWnd,WPARAM wParam,LPARAM lPaerm)
{
       wchar_t str[256] = { 0 };
       swprintf_s(str, L"自定义消息被处理了:%d", lPaerm);
       MessageBox(hWnd, str, L"哎呦", MB_OK);
}
case WM_MYMESSAGE:
              自定义消息(hWnd, wParam, lParam);
              break;


6、运行结果


0a2653c851af460fa595bd959398a8f1.png

目录
相关文章
|
2月前
|
Windows
win32编程 -- 消息机制(一)
win32编程 -- 消息机制(一)
16 0
|
2月前
|
消息中间件
win32编程 -- 消息机制(三)
win32编程 -- 消息机制(三)
16 0
|
2月前
win32编程 -- 消息机制(二)
win32编程 -- 消息机制(二)
16 0
win32编程 -- 消息机制(二)
|
2月前
win32编程 -- 键盘消息
win32编程 -- 键盘消息
18 0
|
2月前
win32编程 -- 鼠标消息
win32编程 -- 鼠标消息
13 0
|
2月前
win32编程 -- 定时消息
win32编程 -- 定时消息
9 0
|
5月前
《QT从基础到进阶·四》信号槽的多种连接方式
《QT从基础到进阶·四》信号槽的多种连接方式
65 0
|
5月前
|
C++
《QT从基础到进阶·十六》QT实现客户端和服务端的简单交互
《QT从基础到进阶·十六》QT实现客户端和服务端的简单交互
50 0
|
10月前
|
存储 程序员 编译器
windows下的串口编程,串口操作类封装
windows下的串口编程,串口操作类封装
|
11月前
|
数据可视化 C++ Windows
非可视化编程的windows窗口 C++ 代码设计:附例程并多多知识点
非可视化编程的windows窗口 C++ 代码设计:附例程并多多知识点
169 0