win32(windows.h)中是否有一个方便函数可以将lParam转换为POINT

Is there a convenience function in win32 (windows.h) that would convert lParam to POINT?

本文关键字:lParam 转换 POINT 函数 方便 windows 有一个 是否 win32      更新时间:2023-10-16

我一直在做以下事情:

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)的事情?

使用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将坐标视为无符号量。

没有,但推出自己的是微不足道的

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

使用CPoint,如CPoint p(lParam);

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