win32(windows.h)中是否有一个方便函数可以将lParam转换为POINT
Is there a convenience function in win32 (windows.h) that would convert lParam to 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)
的事情?
使用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;
}
使用CPoint
,如CPoint p(lParam);
不是直接的,但有GET_X_LPARAM()
和对应的Y。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 将双倍转换为 LPARAM 的麻烦
- 如何将lparam值转换为我传递的类型
- Windows编程:为什么我们要将lParam转换为CREATESTRUCT来获取应用程序状态
- 如何将 LPARAM lParam 转换为 CString
- 如何将 int 转换为 LPARAM C/C++
- win32(windows.h)中是否有一个方便函数可以将lParam转换为POINT
- 无法从"LRESULT (__stdcall *)(HWND,const wchar_t,WPARAM,LPARAM)"转换为"WNDPROC"