DirectXTK нет члена в «Мышь» для «SetWindow (HWND hwnd)» - PullRequest
0 голосов
/ 28 июня 2019

Я пытался реализовать поддержку мыши и клавиатуры в своем игровом движке, используя DirectXTK. Это было довольно просто для клавиатуры, но у меня возникла проблема с реализацией правильной поддержки мыши. Я следовал ЭТОМ за внедрение мыши в мой движок. В этой статье из вики Microsoft говорится, что у меня есть вызов SetWindow, прежде чем я смогу изменить режим мыши с абсолютного на относительный. Звучит просто, но когда я пытаюсь сделать это так:

auto mouse = std::make_unique<DirectX::Mouse>();
mouse->SetWindow(hwnd);
mouse->SetMode(DirectX::Mouse::Mode::MODE_RELATIVE);

Я получаю сообщение об ошибке:

E0135 class "DirectX::Mouse" has no member "SetWindow"

Похоже, этот метод не существует в классе Mouse. Это странно, потому что, если я уберу эту строку с окном настроек, она будет скомпилирована, но у меня не получится во время выполнения из-за этого утверждения в классе Mouse:

assert(mWindow != nullptr);

Таким образом, необходимо установить окно, но как я могу это сделать, когда эта функция не существует? Что хуже статья из вики не старая, она от 18 апреля 2019 года. Кто-нибудь сталкивался с этой проблемой? Как я могу это исправить?

1 Ответ

2 голосов
/ 28 июня 2019

Быстрый взгляд на заголовочный файл , и вы увидите это

#if (!defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)) && defined(WM_USER)
    void __cdecl SetWindow(HWND window);
    static void __cdecl ProcessMessage(UINT message, WPARAM wParam, LPARAM lParam);
#endif

Таким образом, представляется вероятным, что вы не определили WINAPI_FAMILY и / или WM_USER подходящим способом для включения объявления этого метода в заголовочном файле.

Я полагаю, что WM_USER будет определяться #include <windows.h>, поэтому, возможно, все, что вам нужно сделать, - это место, которое включает перед #include <mouse.h>

...