CreateWindow因无法查找窗口类而失败 - C ++

时间:2010-11-29 18:08:07

标签: c++ visual-studio-2008 createwindow

在我的应用程序中,函数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 个答案:

答案 0 :(得分:7)

您必须先调用RegisterClassEx,然后才能在CreateWindow上使用窗口类。

示例代码here

  

每个流程都必须注册自己的流程   窗口类。注册   应用本地类,使用   RegisterClassEx函数。你必须   定义窗口过程,填写   WNDCLASSEX结构的成员,   然后传递一个指向   RegisterClassEx的结构   功能