CreateWindowEx返回null:无法创建窗口

时间:2014-10-02 04:00:50

标签: c++ windows visual-studio winapi visual-c++

CreateWindowEx方法始终返回null。

我不知道什么是错的,但我甚至无法创建一个窗口。

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

请heeeelp !!

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;

}

1 个答案:

答案 0 :(得分:2)

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

我按如下方式更改了它,然后它起作用了:

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