CreateWindowEx返回null:无法创建窗口

CreateWindowEx returns null : unable to create a window

本文关键字:创建 窗口 返回 null CreateWindowEx      更新时间:2023-10-16

CreateWindowEx方法总是返回null。

我不知道出了什么问题,但我甚至无法创建一个窗口。

我的窗口过程是一个静态方法,BaseWndApplication::WndProc,在另一个类中定义,我不确定这是否会导致任何问题,因为我可以成功注册我的WNDCLASSEX结构。

请注意!!

int WINAPI WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine ,
    int nCmdShow
    )
{
const char * WINDOW_CLASS_NAME = "D2DAppClass";
HRESULT hr;
{
    // Register the window class.
    WNDCLASSEX wcex = { sizeof(WNDCLASSEX) };
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = BaseWndApplication::WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hbrBackground = NULL;
    wcex.lpszMenuName = NULL;
    wcex.hCursor = LoadCursor(NULL, IDI_APPLICATION);
    wcex.lpszClassName = WINDOW_CLASS_NAME;
    if (!RegisterClassEx(&wcex))
        return E_FAIL;
    HWND m_hWnd = CreateWindowEx(WS_EX_CLIENTEDGE,
        WINDOW_CLASS_NAME,
        "Direct2D Demo App",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        static_cast<UINT>(ceil(640.f)),
        static_cast<UINT>(ceil(480.f)),
        NULL,
        NULL,
        hInstance,
        NULL
        );
    hr = m_hWnd ? S_OK : E_FAIL;
    if (SUCCEEDED(hr))
    {
        ShowWindow(m_hWnd, SW_SHOWNORMAL);
        UpdateWindow(m_hWnd);
    }
}
return 0;

}

我的回调方法有问题。它被设置为返回0;

我把它改成如下,然后它就起作用了:

static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    return DefWindowProc(hWnd, message, wParam, lParam);
}