mfc之 消息机制

154 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情

解释:

一个消息循环,他从简单来看就是一个消息的队列,每次对窗口有操作时,就会向这个队列中添加消息,同理可得,他也会从消息队列中不断的获取消息,并且对其进行相应操作。而此消息队列中的消息都是来自于硬件(键盘,鼠标)的消息。

 

消息循环:

while(GetMessage(&Msg,NULL,0,0))

{ TranslateMessage(&Msg);

DispatchMessage(&Msg);

 }

GetMessage 此函数用于获取函数

GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax)

 

lpMsg:他是只想msg结构的指针 可以从这个队列中获取消息的信息

hWnd:他表示获取本消息的窗口的句柄。但是在一般使用中,都会把他设置为空 此函数就可以为任何属于调用线程的窗口检索消息

剩下两个参数是指定被检所的最小最大消息值的整数

LPMSG 的具体结构体

typedef struct tagMSG {

  HWND   hwnd;

  UINT   message;

  WPARAM wParam;

  LPARAM lParam;

  DWORD  time;

  POINT  pt;

} MSG, *PMSG, *LPMSG;

hwnd; 消息所指的窗口句柄

message:消息的名称 这里要注意的是他的名称不是输入的字符串 是消息的代号

wParam和lParam 都是32位消息的特定附加信息 区别在于wParam是代表具体的那个按键,lParam他是指具体点击的坐标

TranslateMessage是为了将键盘消息转化 把新的消息放到消息队列中,并且不会影响原来的消息队列

DispatchMessage会将消息传给窗口函数去处理。他消息传输给操作系统,操作胸膛再通过调用窗口的回调函数才对信息进行处理。

消息处理回调:

LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg,WPARAM wparam, LPARAM lparam)

{

}

hwnd,//发送方的窗口句柄

msg,//消息id,即消息的种类

wparam,//详细信息

其实最主要的还是使用msg 这个参数。它用于判断是什么事件,而这些事件都是咋windows中已经定义好的,使用的时候用Switch判断一下在对每个时间做详细操作即可。