持续创作,加速成长!这是我参与「掘金日新计划 · 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判断一下在对每个时间做详细操作即可。