MSG
的结构如下:
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG, *PMSG;
消息程序如下:
long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam)
我的问题:在邮件过程中,为什么它没有将POINT
变量传递给窗口过程,以及如何查找鼠标的POINT
?到GetCursorPos()
?我找到一些例子直接通过LOWORD(lParam), HIWORD(lParam)
得到它。你能告诉我有关它的信息吗?谢谢......
我看到有人写这个,是不是?我不确定:
RECT rect1;
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{
HDC hDC;
WORD x,y;
PAINTSTRUCT ps;
x = LOWORD(lParam);
y = HIWORD(lParam);
switch(iMessage)
{
case WM_LBUTTONDOWN:
if(wParam&MK_CONTROL)
{
rect1.left = x;
rect1.top = y;
}
else if(wParam&MK_SHIFT)
{
rect1.left = x;
rect1.top = y;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
return 0;
}
答案 0 :(得分:5)
在process函数中,为什么它不将POINT变量传递给process函数,以及如何查找鼠标的POINT?
因为如果你真的需要它来检索那些信息的功能。传递几乎不会使用它们的消息处理程序的额外参数是没有意义的。 (可以说WndProc
可能被定义为MSG*
;我不知道其设计的原因,但我猜测成员随着时间的推移被添加到MSG
结构中。)
通过GetCursorPos()?
没有。 GetCursorPos
将返回光标的当前位置,该位置可能与生成消息时的位置不同。你想要GetMessagePos
。 (这类似于GetAsyncKeyState
versus GetKeyState
。)
同样,消息处理程序可以通过GetMessageTime
获取消息时间。
答案 1 :(得分:4)
坐标不会消失。他们在lParam
。见WM_MOUSEMOVE message on MSDN:
A window receives this message through its WindowProc function.
...
lParam
The low-order word specifies the x-coordinate of the cursor.
The coordinate is relative to the upper-left corner of the client area.
The high-order word specifies the y-coordinate of the cursor.
The coordinate is relative to the upper-left corner of the client area.
...
Use the following code to obtain the horizontal and vertical position:
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);