Сейчас я работаю с SDK для игровых площадок, и мне нужно получить WNDCLASS моего игрового окна. Я ничего не нашел в SDK, поэтому я пытаюсь сделать это с помощью hWnd окна игры. Так есть ли способ получить WNDCLASS от HWND?
Мне нужно это, чтобы изменить системный курсор в окне игры
Я не знаю, о каком SDK идет речь, но пока он предоставляет доступ к нативному HWND
типа, вы можете использовать родные звонки.
Чтобы изменить курсор для всех окон этого класса:
Использовать SetClassLongPtr
функция:
SetClassLongPtr(hwnd, GCLP_HCURSOR, reinterpret_cast<LONG_PTR>(newCursorHandle));
Чтобы изменить курсор только для игрового окна:
Прежде всего, есть WM_SETCURSOR
сообщение, которое вы можете обработать, чтобы получить контроль над тем, какой курсор отображается в окне. Вы можете прочитать больше об этом в комментарии Адама Розенфилда ниже.
Что в стороне, есть альтернатива: согласно 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::array
с std::vector
а также .data()
с &className[0]
, так же как nullptr
с NULL
, GetClassInfo
вернет WNDCLASS
если вам нужно это вместо WNDCLASSEX
,
Других решений пока нет …