我一直在做以下事情:
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)
?
答案 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_LPARAM
或GET_Y_LPARAM
宏来提取x坐标或y坐标。重要不要使用
LOWORD
或HIWORD
宏来提取光标位置的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对应。