在win32(windows.h)中有一个便利的function,将lParam转换为POINT?

我一直在做以下工作:

LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { mouse.x = LOWORD(lParam); mouse.y = HIWORD(lParam); // ... return 0; } 

我想知道是否有一种方便的方法可以将LOWORD(lParam)HIWORD(lParam)转换为Point ? 所以我可以做一些像mouse = ToPoint(lParam)

不,但是推出自己的产品并不重要:

 POINT ToPoint(LPARAM lParam) { POINT p={GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam)}; return p; } 

使用GET_X_LPARAM()GET_Y_LPARAM()MAKEPOINTS() ,就像WM_MOUSEMOVE文档说的那样:

使用下面的代码来获取水平和垂直位置:

xPos = GET_X_LPARAM(lParam);

yPos = GET_Y_LPARAM(lParam);

如上所述,x坐标在返回值之后的低位; y坐标是高阶短的 (均表示有符号值,因为它们可以在具有多个监视器的系统上取负值)。 如果将返回值分配给变量,则可以使用MAKEPOINTS宏从返回值中获取POINTS结构。 您也可以使用GET_X_LPARAMGET_Y_LPARAM宏来提取x或y坐标。

重要请勿使用LOWORDHIWORD宏来提取光标位置的x和y坐标,因为这些宏在具有多个监视器的系统上返回不正确的结果。 具有多个监视器的系统可以具有负x和y坐标, LOWORDHIWORD将坐标视为无符号数量。

使用CPoint ,如CPoint p(lParam);

不是直接,而是有GET_X_LPARAM()和相应的Y.