我一直在做以下工作:
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_LPARAM
或GET_Y_LPARAM
宏来提取x或y坐标。重要请勿使用
LOWORD
或HIWORD
宏来提取光标位置的x和y坐标,因为这些宏在具有多个监视器的系统上返回不正确的结果。 具有多个监视器的系统可以具有负x和y坐标, LOWORD和HIWORD将坐标视为无符号数量。
使用CPoint
,如CPoint p(lParam);
不是直接,而是有GET_X_LPARAM()
和相应的Y.