1. 首页 > 经验  > 正文

MSG(Windows程式中的结构体)

MSG(Windows程式中的结构体)

MSG是Windows程式中的结构体。在Windows程式中,讯息是由MSG结构体来表示的。成员变数含义:第一个成员变数hwnd表示讯息所属的视窗;第二个成员变数message指定了讯息的标识符。第三、第四个成员变数wParam和lParam,用于指定讯息的附加信息。最后两个变数分别表示讯息投递到讯息伫列中的时间和滑鼠的当前位置

结构体

在Windows程式中,讯息是由MSG结构体来表示的。MSG结构体的定义如下(参见MSDN):
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
该结构体中各成员变数的含义如下:
第一个成员变数hwnd表示讯息所属的视窗。我们通常开发的程式都是视窗应用程式,一个讯息一般都是与某个视窗相关联的。例如,在某个活动视窗中按下滑鼠左键,产生的按键讯息就是发给该视窗的。在Windows程式中,用HWND类型的变数来标识视窗。
第二个成员变数message指定了讯息的标识符。在Windows中,讯息是由一个数值来表示的,不同的讯息对应不同的数值。但是由于数值不便于记忆,所以Windows将讯息对应的数值定义为WM_XXX宏(WM是Window Message的缩写)的形式,XXX对应某种讯息的英文拼写的大写形式。例如,滑鼠左键按下讯息是WM_LBUTTONDOWN,键盘按下讯息是WM_KEYDOWN,字元讯息是WM_CHAR,等等。在程式中我们通常都是以WM_XXX宏的形式来使用讯息的。
提示:如果想知道WM_XXX讯息对应的具体数值,可以在Visual C++开发环境中选中WM_XXX,然后单击滑鼠右键,在弹出选单中选择goto definition,即可看到该宏的具体定义。跟蹤或查看某个变数的定义,都可以使用这个方法
第三、第四个成员变数wParam和lParam,用于指定讯息的附加信息。例如,当我们收到一个字元讯息的时候,message成员变数的值就是WM_CHAR,但用户到底输入的是什幺字元,那幺就由wParam和lParam来说明。wParam、lParam表示的信息随讯息的不同而不同。如果想知道这两个成员变数具体表示的信息,可以在MSDN中关于某个具体讯息的说明文档查看到。读者可以在VC++的开发环境中通过goto definition查看一下WPARAM和LPARAM这两种类型的定义,可以发现两种类型实际上就是unsigned int和long。
最后两个变数分别表示讯息投递到讯息伫列中的时间和滑鼠的当前位置。
hwnd
Identifies the window whose window procedure receives the message.
message
Specifies the message number.
wParam
Specifies additional information about the message. The exact meaning depends on the value of the message member.
lParam
Specifies additional information about the message. The exact meaning depends on the value of the message member.
time
Specifies the time at which the message was posted.
pt
Specifies the cursor position, in screen coordinates, when the message was posted.

minigui

在 MiniGUI 中,讯息被如下定义(include/window.h):
352 typedef struct _MSG
353 {
354 HWND hwnd;
355 int message;
356 WPARAM wParam;
357 LPARAM lParam;
358 #ifdef _LITE_VERSION
359 unsigned int time;
360 #else
361 struct timeval time;
362 #endif
363 POINT pt;
364 #ifndef _LITE_VERSION
365 void* pAdd;
366 #endif
367 }MSG;
368 typedef MSG* PMSG;
一个讯息由该讯息所属的视窗(hwnd)、讯息编号(message)、讯息的 WPARAM 型参数(wParam)连同讯息的 LPARAM 型参数(lParam)组成。讯息的两个参数中包含了重要的内容。比如,对滑鼠讯息而言,lParam 中一般包含滑鼠的位置信息,而 wParam 参数中则包含发生该讯息时,对应的 SHIFT 键的状态信息等。对其他不同的讯息类型来讲,wParam 和 lParam 也具备明确的定义。当然,用户也能自定义讯息,并定义讯息的 wParam 和 lParam 意义。为了用户能够自定义讯息,MiniGUI 定义了 MSG_USER 宏,可如下定义自己的讯息:
#define MSG_MYMESSAGE1 (MSG_USER + 1)
#define MSG_MYMESSAGE2 (MSG_USER + 2)

本文由'候炳钛'发布,不代表演示站立场,转载/删除联系作者,如需删除请-> 关于侵权处理说明