C++ 错误\u CreateWindowEx()中的无效\u窗口\u句柄

C++ 错误\u CreateWindowEx()中的无效\u窗口\u句柄,c++,winapi,user-interface,window,C++,Winapi,User Interface,Window,当CreateWindowEx()在我的程序中失败时,我得到错误\u无效\u窗口\u句柄。我使用的是本地Win32 API的C++。 我不知道为什么,我尝试过在CreateWindowEx中使用一些参数,但每次都会产生完全相同的错误 我还尝试将W添加到随机函数和数据类型中,希望UNICODE版本能够以某种方式工作……当然,没有任何变化 这是调用CreateWindowEx()的函数: 这是主要的方法: static HWND mainhwnd; void main() { DWORD t

当CreateWindowEx()在我的程序中失败时,我得到错误\u无效\u窗口\u句柄。我使用的是本地Win32 API的C++。 我不知道为什么,我尝试过在CreateWindowEx中使用一些参数,但每次都会产生完全相同的错误

我还尝试将
W
添加到随机函数和数据类型中,希望UNICODE版本能够以某种方式工作……当然,没有任何变化

这是调用CreateWindowEx()的函数:

这是主要的方法:

static HWND mainhwnd;
void main()
{
    DWORD time;
    time = GetTickCount();

    MSG msg;
    WNDCLASSEXW wnd = { 0 };
    NOTIFYICONDATA nid;

    InitMainWindow( &mainhwnd, &wnd, MainWndProc );
    InitNotifyIcon( &mainhwnd, &nid );
    ShowWindow( mainhwnd, true );
    UpdateWindow( mainhwnd );

    time = ( GetTickCount() - time );
    std::cout << "Time: " << time << "\r\n" << std::endl;

    for( ; ; ) //message loop
    {
        while( GetMessage( &msg, NULL, 0, 0 ) )
        {
            if( WM_CLOSE == msg.message ) //reassign close button to minimize to tray
            {
                printf("close\r\n");
                break;
            }

            TranslateMessage(&msg);
            DispatchMessage(&msg);

            /*if( !IsDialogMessage( hwndListDialog, &msg ) )
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }*/
        }
        Sleep( 5 );
    }
}

我想问题出在您调用DefWindowProc

尝试更改行:

    return DefWindowProc( mainhwnd, uMsg, wParam, lParam );
为此:

    return DefWindowProc( hwnd, uMsg, wParam, lParam );

我刚刚在这里编译了您的代码,它可以正常工作。

我想说调用了您的
MainWndProc
,问题是您将
mainhwnd
作为DefWindowProc参数传递,而它仍然没有初始化。你应该做的是:

return DefWindowProc( hwnd, uMsg, wParam, lParam );

1.
RegisterClassEx调用的结果是什么<代码>2。是否调用过您的窗口进程?@Mr.com我确实调用了GetLastError(),因此我知道我得到了错误\u无效\u窗口\u句柄。@romar。我刚刚把我的Windows程序添加到问题中。它从未被调用。在
WM_上返回
0
是否会创建
更改任何内容?@pezcode不幸的是,它没有。CreateWindowEx()函数本身失败,这意味着它无法首先到达Wndproc。谢谢!那是一个愚蠢的错误,我不是故意键入mainhwnd的。
    return DefWindowProc( hwnd, uMsg, wParam, lParam );
return DefWindowProc( hwnd, uMsg, wParam, lParam );