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、运行结果

 

欢迎关注公众号:顺便编点程

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web安全工具库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值