[英]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對應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.