簡體   English   中英

如何從HWND獲得WNDCLASS?

[英]How to get WNDCLASS from HWND?

我現在正在使用游樂場SDK,需要獲得我游戲窗口的WNDCLASS。 我還沒有在SDK中找到任何東西,這就是為什么我試圖用hWnd的游戲窗口來做這件事。 那么有沒有辦法從HWND獲得WNDCLASS? 我需要這個來改變游戲窗口中的系統光標

我不知道有問題的SDK,但只要它提供對本機HWND類型的訪問,您就可以使用本機調用。


要更改該類的所有窗口的光標:

使用SetClassLongPtr函數:

SetClassLongPtr(hwnd, GCLP_HCURSOR, reinterpret_cast<LONG_PTR>(newCursorHandle));

要僅改變游戲窗口的光標:

首先,有一個WM_SETCURSOR消息,您可以處理該消息來控制窗口中顯示的光標。 您可以在下面的Adam Rosenfield的評論中閱讀更多相關內容。

除此之外,還有另一種選擇:根據SetCursor文檔,首先確保將類的光標設置為NULLNULL )。 然后,當鼠標進入和離開客戶區時,您可以使用SetCursor功能。 為了不干擾類中的其他窗口,請確保在鼠標輸入時將類光標設置為NULL並將其設置回鼠標退出時的狀態。

otherCursor = SetCursor(otherCursor);

要獲得與窗口關聯的只讀WNDCLASSEX:

首先,使用GetClassName獲取與窗口關聯的類的名稱:

std::array<TCHAR, 256> className; //256 is max classname length
GetClassName(hwnd, className.data(), className.size());

然后,在調用GetClassInfoEx使用它:

WNDCLASSEX wce;
GetClassInfoEx(GetModuleHandle(nullptr), className.data(), &wce);

現在您可以訪問wce來讀取類結構的內容。 如果需要,可以使用&className[0]替換帶有std::vector.data() std::array ,以及帶有NULL nullptr 如果需要,則GetClassInfo將返回WNDCLASS而不是WNDCLASSEX

暫無
暫無

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

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