Как получить WNDCLASS от HWND?

Сейчас я работаю с SDK для игровых площадок, и мне нужно получить WNDCLASS моего игрового окна. Я ничего не нашел в SDK, поэтому я пытаюсь сделать это с помощью hWnd окна игры. Так есть ли способ получить WNDCLASS от HWND?
Мне нужно это, чтобы изменить системный курсор в окне игры

3

Решение

Я не знаю, о каком 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,

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]