bod*_*ydo 5 c++ windows winapi point
我一直在做以下事情:
LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {
mouse.x = LOWORD(lParam);
mouse.y = HIWORD(lParam);
// ...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不知道是否有一个方便的方法,将转换LOWORD(lParam)并HIWORD(lParam)到Point我吗?所以我可以做点什么mouse = ToPoint(lParam)?
Rem*_*eau 10
使用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将坐标视为无符号量.
不,但滚动你自己将是微不足道的:
POINT ToPoint(LPARAM lParam)
{
POINT p={GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam)};
return p;
}
Run Code Online (Sandbox Code Playgroud)
使用CPoint,像CPoint p(lParam);