6

我一直在做以下事情:

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

我想知道是否有一种方便的方法可以为我转换和LOWORD(lParam)转换?所以我可以做类似的事情?HIWORD(lParam)Pointmouse = ToPoint(lParam)

4

4 回答 4

10

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

使用以下代码获取水平和垂直位置:

xPos = GET_X_LPARAM(lParam);

yPos = GET_Y_LPARAM(lParam);

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

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

于 2013-08-07T18:07:09.090 回答
7

不,但是自己动手是微不足道的:

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

  return p;
}
于 2013-08-07T17:05:10.137 回答
5

使用CPoint,如CPoint p(lParam);

于 2013-08-07T17:08:38.810 回答
1

不是直接的,而是GET_X_LPARAM()Y 的对应。

于 2013-08-07T17:06:34.060 回答