消息的概念和作用
消息组成(windows下)
窗口句柄
消息ID
消息的两个参数(两个附带信息)
消息产生的时间
消息产生时的鼠标位置
消息的作用
当操作系统通知窗口工作时,采用消息的方式派发给窗口的窗口处理函数。
DispatchMessage -派发消息
LRESULT DispatchMessage(
CONST MSG *lpmsg //要派发的消息
};
{派发原理
nMsg.hwnd-->保存窗口数据的内存-->WindProc
WndProc(nMsg.hwnd,nMsg.message,nMsg.wParam,nMsg.IParam){
//回到自己的代码(处理消息)
}
}
将消息派发到该消息所属窗口的窗口处理函数上窗口处理函数
每个窗口必须具有窗口处理函数。
LRESULT CALLBACK WindwProc(
HWND hWnd,//句柄消息
UNIT uMsg,//消息ID
WPARAM wParam,//消息参数
LPARAM IParam,//消息参数
};当系统通知窗口时,会调用窗口处理函数,同时将消息ID和消息参数传递给窗口处理函数。在窗口处理函数中,不处理的消息,使用缺省窗口处理函数。例如:DefWindowProc。
GetMessage -获取本进程的消息
BOOL GetMessage(
LPMSG lpMsg,//存放获取到的消息buffer
Hwnd hWnd,//窗口句柄
UINT wMsgFilterMin,//获取消息的最小ID
UINT wMsgFilterMax,//获取消息的最大ID
};
lpMsg - 当获取到消息后,将消息的参数存到MSG结构中。
hWnd - 获取到hWnd所指定的窗口的消息。
wMsgFilterMin,wMsgFilterMax - 只能获取到由他们指定的消息范围内的消息,如果都为0,表示没有范围。抓到WM_QUIT返回0,否则返回true
TranslateMessage -翻译消息。将按键消息翻译成字符消息。
BOOL TranslateMessage(
CONST MSG *lpMsg //要翻译的消息地址
};
检查消息是否是按键的消息,如果不是按键消息不做处理直接返回。
常见消息
WM_DESTROY
产生时间:窗口被销毁时的消息。
附带信息:wParam:0
IParam:0
一般用法:常用于在窗口被销毁之前做相应的善后处理,例如资源、内存等WM_SYSCOMMAND
产生时间:当点击窗口的最大化、最小化、关闭等
附带信息:wParam:具体点击的位置,例如关闭SC_CLOSE等
IParam:鼠标光标的位置。
LOWORD(Iparam);//水平位置
HIWORD(IParam);//垂直位置
一般用法:常在窗口关闭时,提示用户处理。WM_CREATE
产生时间:在窗口创建成功但还未显示时
附带信息:wParam:为0
IParar:为CREATESTRUCT类型的指针。
通过这个指针可以获取CreatWindowEx中的全部12个参数的信息。
一般用法:常用于初始化窗口的参数,资源等,包括创建子窗口等。WM_SIZE
产生时间:在窗口的大小发生变化后。
附带信息:wParam:窗口的大小变化的原因。
IParam:窗口变化后的大小。
LOWORD(IParam)//变化后的宽度
HIWORD(IParam)//变化后的高度
一般用法:常用于窗口大小变化后,调整窗口内各个部分的布局。WM_QUIT
产生时间:由程序员发送
附带信息:wParam:PostQuitMessage函数传递的参数。
IParam:0.
一般用法:用于结束消息循环,当GetMessage收到这个消息后,会返回FALSE,结束while处理,退出消息循环。