CreateWindow не удается найти класс окна - C ++ - PullRequest
3 голосов
/ 29 ноября 2010

В моем приложении функция CreateWindow почему-то не работает. GetLastError указывает на ошибку 1407, которая, согласно документации MSDN, «Не удается найти класс окна». Следующий код показывает, как вызывается CreateWindow и имена соответствующих переменных во время вызова:

m_hInstance = ::GetModuleHandle( NULL );

if ( m_hInstance == NULL )
{
    TRACE(_T("CNotifyWindow::CNotifyWindow : Failed to retrieve the module handle.\r\n\tError: %d\r\n\tFile: %s\r\n\tLine: %d\r\n"), ::GetLastError(), __WFILE__, __LINE__);
    THROW(::GetLastError());
}

m_hWnd = ::CreateWindow(
    _pwcWindowClass,    // L"USBEventNotificationWindowClass"
    _pwcWindowName,     // L"USBEventNotificationWindow"
    WS_ICONIC,
    0,
    0,
    CW_USEDEFAULT,
    0,
    NULL,
    NULL,
    m_hInstance,        // 0x00400000
    NULL
    );

if ( m_hWnd == NULL )   // m_hWnd is returned as NULL and exception is thrown.
{
    TRACE(_T("CNotifyWindow::CNotifyWindow : Failed to create window.\r\n\tError: %d\r\n\tFile: %s\r\n\tLine: %d\r\n"), ::GetLastError(), __WFILE__, __LINE__);
    THROW(::GetLastError());
}

::ShowWindow( m_hWnd, SW_HIDE );

Что я делаю не так?

1 Ответ

7 голосов
/ 29 ноября 2010

Вам нужно вызвать RegisterClassEx , прежде чем вы сможете использовать класс окна в CreateWindow.

Пример кода здесь .

Каждый процесс должен зарегистрировать свой собственный оконные классы. Чтобы зарегистрировать приложение локальный класс, используйте Функция RegisterClassEx. Вы должны определите процедуру окна, заполните члены структуры WNDCLASSEX, а затем передать указатель на структура в RegisterClassEx функция.

...