3

私のアプリケーションでは、関数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 );

私は何が間違っているのですか?

4

1 に答える 1

7

CreateWindow でウィンドウ クラスを使用する前に、RegisterClassExを呼び出す必要があります。

サンプルコードはこちら

各プロセスは、独自のウィンドウ クラスを登録する必要があります。アプリケーション ローカル クラスを登録するには、RegisterClassEx 関数を使用します。ウィンドウ プロシージャを定義し、WNDCLASSEX 構造体のメンバを設定してから、構造体へのポインタを RegisterClassEx 関数に渡す必要があります。

于 2010-11-29T18:10:30.790 に答える