HWND подходит NULL - PullRequest
       2

HWND подходит NULL

0 голосов
/ 26 января 2019

Код, который я использую:

#include <Windows.h>

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    const auto pClassName = "direct3D";

    //register window class
    WNDCLASSEX wc = { 0 };
    wc.cbSize = sizeof(wc);
    wc.style = CS_OWNDC;
    wc.lpfnWndProc = DefWindowProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = nullptr;
    wc.hCursor = nullptr;
    wc.hbrBackground = nullptr;
    wc.lpszMenuName = pClassName;
    wc.hIconSm = nullptr;        
    RegisterClassEx(&wc);

    //create instance of window
    HWND hwnd = CreateWindowEx(
        0,
        pClassName, 
        "Direct3D", 
        WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU, 
        0, 0, 640, 480, 
        nullptr, nullptr, hInstance, nullptr 
    );
    ShowWindow(hwnd, SW_SHOW);


    //message pump

    MSG msg;
    int test = GetMessage(&msg, nullptr, 0, 0);
    while (GetMessage(&msg, nullptr, 0, 0) > 0) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }


    return 0;
}

Ожидаемый результат: простое окно, которое я могу перетаскивать, сворачивать или закрывать.

Ошибки: ошибки не печатаются.Но пошаговое выполнение показывает это для значения hwnd: hwnd coming up NULL and a read error.Я предполагаю, что это как-то связано с этим.Я просмотрел документы MSDN, относящиеся к этой ошибке, но ничего полезного.Я следую инструкциям по Directx3d на YouTube.

1 Ответ

0 голосов
/ 26 января 2019

Вы не даете своему классу Window имя, которое является членом lpszClassName. Вместо этого вы устанавливаете lpszMenuName, что, безусловно, не то, что вы хотите.

PS: Вы говорите: "Ошибки не печатаются" . Действительно, Win32 не печатает ошибки, это ваша обязанность всегда проверять возвращаемое значение вызовов функций Win32 (RegisterClassEx() возвращает 0 при ошибке). Затем, если это не удается, позвоните GetLastError(), чтобы узнать причину. Вы можете получить список доступных причин здесь . И если вы хотите, теперь вы можете напечатать сообщение об ошибке (см. FormatMessage () ) в окне отладки, stderr, ваш файл журнала ...

Как вы, наверное, заметили, в учебниках в Интернете обычно пропускается обработка ошибок, потому что это скучно и добавляет шум тому, чему они хотят научить. Но в реальном мире правильная проверка ошибок - всегда лучшая идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...