MSG类的定义
BOOL GetMessage(//从消息队列中取消息的函数,返回一个BOOL值,当消息队列中有消息,就返回一个真。
LPMSG lpMsg,//message infomation 存放消息对象的名字就行了
HWND hWnd,//handle to window 设置为NULL的话,就是获取所有线程的消息
UINT wMsgFilterMin,//first message指示最小的消息的值。WM_KEYFIRST可以指示第一个键盘消息
UINT wMsgFilterMax//last message指示最大的消息的值。如果都设置为0,函数将获取所有范围的消息。即取所有消息队列。
);
例如:MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);//对取到的消息对翻译。比如,按下按键,产生WM_KEYDOWN,WM_KEYUP.如果是输入字母(lpParam附加信息提供),那么. 翻译为WM_CHAR(翻译)
DispatchMessage(&msg);//将收到的消息传递到回调函数。先路由给操作系统,然后操作系统调用回调函数。(投发)
}
----------------------------------
MSG类的定义
typedef struct tagMSG { // msg HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG;
HWND:Identifies the window whose window procedure receives the message.也就是一个句柄。
句柄(HANDLE),资源的标识。
操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源。按资源的类型,又可将句柄细分为图标句柄(HICON),光标句柄(HCURSOR),窗口句柄(HWND)
应用程序实例句柄(HINSTANCE)等等各种类型的句柄。操作系统给每一个窗口制定一个唯一的标识号,即窗口句柄。
UINT:unsigned int 也就是说 message存放的是一些无符号整形变量。例如,我们按下鼠标,就会产生一个UINT数给message,那么问题来了。
这些数字,是很不好记的,微软给这些UINT定义成了一些宏。这些宏是以WM_开头的。比如,按下鼠标左键为WM_LBOTTONDOWN。 其他的宏要用的时候,自己去查MSDN
WPARAM:也是一种整数类型的数据。wParam存放的是message的附加参数,比如,我们按下A键,产生一个WM_CHAR消息,但是不知道按下的是哪个按键,所以,可以将A的ASCII码放在wParam中去。
LPARAM:和WPARAM的意思一样,作用不同。
DWORD:16*2的整数,time:Specifies the time at which the message was posted
POINT:结构体。可以差MSDN。表示了坐标值。pt指示一个光标的位置
int WINAPI WinMain(//windows应用程序的入口函数 HINSTANCE hInstance, //指向当前运行的应用程序实例的句柄。Handle to the current instance of the application HINSTANCE hPrevInstance, //指向前一个运行的应用程序实例的句柄。Handle to the previous instance of the application LPWSTR lpCmdLine, //LP:长指针类型。LPWSTR:一个指向字符串的长指针。lpCmdLine是命令行的参数command line int nShowCmd //nShowCmd,来决定你的应用程序是最小化还是最大化,还是关闭窗口 )//WinMain函数是操作系统调用的,里面的参数都是操作系统自动给的。命令行就是在windows命令行里面调用你写的程序,就像你在命令行敲calc.exe运行
[MFC学习笔记]--MSG结构体
最新推荐文章于 2024-05-11 17:21:02 发布