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

目录
相关文章
|
消息中间件 Kafka
mac 搭建kafka系列教程
mac 搭建kafka系列教程
236 0
mac 搭建kafka系列教程
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
Baichuan-Omni-1.5:百川智能开源全模态理解与生成模型,支持文本、图像、音频和视频的多模态输入和输出
Baichuan-Omni-1.5 是百川智能开源的全模态理解模型,支持文本、图像、音频和视频的多模态输入和输出,显著提升多模态交互体验。
571 22
Baichuan-Omni-1.5:百川智能开源全模态理解与生成模型,支持文本、图像、音频和视频的多模态输入和输出
|
3月前
|
编解码 监控 算法
CDN+OSS边缘加速实践:动态压缩+智能路由降低30%视频流量成本(含带宽峰值监控与告警配置)
本方案通过动态压缩、智能路由及CDN与OSS集成优化,实现视频业务带宽成本下降31%,首帧时间缩短50%,错误率降低53%。结合实测数据分析与架构创新,有效解决冷启动延迟、跨区域传输及设备适配性问题,具备快速投入回收能力。
153 0
|
7月前
|
机器学习/深度学习 算法 文件存储
神经架构搜索:自动化设计神经网络的方法
在人工智能(AI)和深度学习(Deep Learning)快速发展的背景下,神经网络架构的设计已成为一个日益复杂而关键的任务。传统上,研究人员和工程师需要通过经验和反复试验来手动设计神经网络,耗费大量时间和计算资源。随着模型规模的不断扩大,这种方法显得愈加低效和不够灵活。为了解决这一挑战,神经架构搜索(Neural Architecture Search,NAS)应运而生,成为自动化设计神经网络的重要工具。
|
10月前
|
安全 物联网 网络安全
智能设备的安全隐患:物联网(IoT)安全指南
智能设备的安全隐患:物联网(IoT)安全指南
752 12
|
设计模式 Java 调度
JUC线程池: ScheduledThreadPoolExecutor详解
`ScheduledThreadPoolExecutor`是Java标准库提供的一个强大的定时任务调度工具,它让并发编程中的任务调度变得简单而可靠。这个类的设计兼顾了灵活性与功能性,使其成为实现复杂定时任务逻辑的理想选择。不过,使用时仍需留意任务的执行时间以及系统的实际响应能力,以避免潜在的调度问题影响应用程序的行为。
166 1
|
安全 Linux 网络安全
Linux 多种方式实现文件共享(一)VSFTP4
【8月更文挑战第4天】Linux系统中VSFTP(Very Secure FTP)服务的配置方法,涵盖匿名访问、本地用户登录及虚拟用户管理等场景。VSFTP作为增强版FTP服务器,具备较高安全性,如普通用户权限运行、命令整合、chroot限制等特性。文中详细说明了配置步骤,包括安装VSFTP、修改主配置文件(如启用被动模式、设置端口范围)、创建用户及家目录、设置虚拟用户认证数据库等。此外,还介绍了如何实现FTP服务的加密传输,通过生成SSL证书并配置VSFTP以支持安全连接。这些配置适用于不同需求的文件共享服务。
150 4
|
JavaScript
vue 监听 sessionStorage 中值的变化
vue 监听 sessionStorage 中值的变化
291 1
|
消息中间件 监控 负载均衡
中间件消息订阅者(Subscriber)
【6月更文挑战第10天】
146 1
|
SQL Java 大数据
5款开源BI工具优缺点及介绍
【4月更文挑战第15天】对比了几款开源BI报表工具:Superset以其高性能和高度可定制化受青睐,适合复杂分析;Metabase以其简洁易用和广泛兼容性脱颖而出,适合快速构建报表;DataEase以其轻量级和易部署特点吸引中小型企业;JasperReports擅长复杂报表生成,适合Java环境;Pentaho CE则是一体化平台,适合需要全面企业级功能的用户。选择时应结合公司需求、技术背景和数据规模来决定。
4553 6