win32(windows.h)中有一个便利函数可以将lParam转换为POINT吗?

时间:2013-08-07 17:02:43

标签: c++ windows winapi 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)

之类的事情

4 个答案:

答案 0 :(得分:10)

使用GET_X_LPARAM()GET_Y_LPARAM()MAKEPOINTS(),就像WM_MOUSEMOVE documentation所说:

  

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

     

xPos = GET_X_LPARAM(lParam);

     

yPos = GET_Y_LPARAM(lParam);

     

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

     

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

答案 1 :(得分:6)

不,但滚动你自己将是微不足道的:

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

  return p;
}

答案 2 :(得分:5)

使用CPoint,例如CPoint p(lParam);

答案 3 :(得分:1)

不是直接但有GET_X_LPARAM()和Y对应。