[MFC入门一]基于消息,事件驱动(Message Based,Event Driven)
学习了一些C++,对C++的语法也基本上有所了解了,由于偶是一个C++的业余爱好者,也一直应用.NET操作系统,没什么机会到Linux等系统下去运行。所以VC++也是我的目标,喜欢上了游戏,也喜欢外挂但是用.NET来搞这些总觉得不爽,C++才是不错的选择。本系列将记录本人学习MFC的一个过程,也可以称为笔记,今天来看看MFC中的消息。
MFC程序基于消息,而使用事件驱动。也就是说MFC就是一个死循环,里面有很多的条件,每个条件对应一个方法。这些条件就是有消息类定义,当用户触发事件时,将发送消息到响应的窗口。当程序收到消息时进行解析,判断如果符合条件,将运行当前事件的处理方法。
窗口函数是一个回调函数(用户定义的函数用于Windows操作系统调用的函数),它的形式如下所示。
MFC程序基于消息,而使用事件驱动。也就是说MFC就是一个死循环,里面有很多的条件,每个条件对应一个方法。这些条件就是有消息类定义,当用户触发事件时,将发送消息到响应的窗口。当程序收到消息时进行解析,判断如果符合条件,将运行当前事件的处理方法。
MSG msg;
while(GetMessage(&msg,NULL,NULL,NULL))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
每一个程序都存在上述的循环,而MSG是一个结构,是Windows内设的一种数据格式,可以在WinUser.h中找到,代码如下:while(GetMessage(&msg,NULL,NULL,NULL))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
/*
* Message structure
*/
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
#ifdef _MAC
DWORD lPrivate;
#endif
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;
接受并处理消息的主角是窗口,每一个窗口都必须要有能够处理消息的方法,称为“窗口函数”(Window Procedure/Function)。当窗口获得消息后,必须判断消息的类别,将消息转换(TranslateMessage(&msg)转换键盘消息),然后将消息传递到(DispatchMessage(&msg))窗口函数去处理。* Message structure
*/
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
#ifdef _MAC
DWORD lPrivate;
#endif
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;
窗口函数是一个回调函数(用户定义的函数用于Windows操作系统调用的函数),它的形式如下所示。
LRESULT CALLBACK WinProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
其中wParam和lParam的意义因消息的不同而不同,但可以知道的是wParam的位数是随着操作系统的位数而定的,在32位的操作系统中为32位,当然64位的就为64位。知道了这个函数后,如果要将每一个消息对应到响应的处理函数中就需要如switch/case结构来判断,为了让程序更好的模块化,需要了解Message Map(消息映射)的原理,今天就先初步了解一下Message是怎么回事。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架