簡體   English   中英

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_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對應。

暫無
暫無

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM