我正在與操場SDK一起工作,需要獲取我的遊戲窗口的WNDCLASS。我沒有在SDK中找到任何東西,這就是爲什麼我試圖用遊戲窗口的hWnd來做到這一點。那麼有沒有辦法從HWND獲取WNDCLASS? 我需要這個來更改遊戲窗口中的系統光標如何從HWND獲取WNDCLASS?
3
A
回答
5
我不知道有關SDK的問題,但只要它提供對本機HWND
類型的訪問權限,就可以使用本機調用。
改變光標該類的所有窗口:
使用SetClassLongPtr
功能:
SetClassLongPtr(hwnd, GCLP_HCURSOR, reinterpret_cast<LONG_PTR>(newCursorHandle));
改變光標只是在遊戲窗口:
首先,您可以處理一個WM_SETCURSOR
消息,以控制窗口中顯示的光標。您可以在下面的Adam Rosenfield的評論中閱讀更多內容。
除此之外,還有一個選擇:根據SetCursor
文檔,首先確保類的光標設置爲空(NULL
)。然後,當鼠標進入和離開客戶區域時,您可以使用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
閱讀類結構的內容。如果需要,你可以用std::vector
和.data()
與&className[0]
取代std::array
,以及nullptr
與NULL
。 GetClassInfo
會返回一個WNDCLASS
,如果你需要的,與其WNDCLASSEX
。
相關問題
- 1. 從Firefox獲取HWND
- 2. 如何從字符串中獲取HWND?
- 3. 從HWnd獲取永久CWnd
- 4. 從HWND中獲取HMENU Hook
- 5. 從hWnd獲取(資源)ID
- 6. 如何獲取Window實例的hWnd?
- 7. 如何通過HWND獲取窗口類?
- 8. 獲取的hWnd從當前進程
- 9. 如何從具有特定HWND的窗口中獲取文本?
- 10. 如何使用託管VB.net代碼從HWND獲取進程ID?
- 11. JACOB獲取窗口的HWND
- 12. 通過進程ID獲取hwnd C++
- 13. PAMIE:獲取IE窗口的hwnd
- 14. 在Qt中獲取Widget的HWND
- 15. 獲取每個窗口的HWND?
- 16. 獲取HWND支持Direct3D初始化
- 17. 如何在另一窗口中獲取Combobox的HWND?
- 18. 如何獲取ATL DLL中的HWND(用於SendMessage或PostMessage)
- 19. 如何獲取給定HWND的工具提示文本?
- 20. 如何通過編程方式從進程HWND獲取句柄ID?
- 21. 如何從hWnd獲得顯示器屏幕分辨率?
- 22. Win32獲取從窗口發送事件的對象的HWND WndProc
- 23. 從UWP中的CoreWindow對象中獲取HWND
- 24. 從工具欄獲取包含IE窗口的HWND
- 25. NSIS插件:不能從參數函數獲取HWND
- 26. 從HWND到控制
- 27. 如何截斷HWND標題
- 28. 獲取窗口hwnd如果所有者hwnd,窗口的名稱和大小已知
- 29. 如何獲取當前活動的Windows資源管理器窗口的HWND?
- 30. 如何從提供HWND的自繪窗口提取文本信息?
只是好奇,但你爲什麼不能跟蹤你傳入'RegisterClass'數據? –
@AdamRosenfield操場是一款適用於休閒遊戲的跨平臺SDK,它創建了一個窗口。 – IronMensan
@ElDorado,想知道,因爲通常不需要訪問課程,你在做什麼? – chris