结构MSG如下:
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG, *PMSG;
Run Code Online (Sandbox Code Playgroud)
消息程序如下:
long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam)
Run Code Online (Sandbox Code Playgroud)
我的问题:在消息过程中,为什么它没有将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;
}
Run Code Online (Sandbox Code Playgroud)
在process函数中,为什么它不将POINT变量传递给process函数,以及如何查找鼠标的POINT?
因为如果你真的想要它,函数存在来检索那些信息.传递几乎不会使用它们的消息处理程序的额外参数是没有意义的.(可以说WndProc可以定义为a MSG*;我不知道其设计的原因,但我猜测成员会MSG随着时间的推移被添加到结构中.)
通过GetCursorPos()?
否.GetCursorPos将返回光标的当前位置,这可能与生成消息时的位置不同.你反而想要GetMessagePos.(这与GetAsyncKeyState对比GetKeyState相似.)
同样,消息处理程序可以通过获取消息时间GetMessageTime.
| 归档时间: |
|
| 查看次数: |
14657 次 |
| 最近记录: |