CreateWindowEx失败,GetLastError返回0;在WindowProc中调用DefWindowProc

时间:2016-11-03 04:53:44

标签: windows winapi

我在使用WinAPI创建一个窗口时遇到了问题,这让我花了很长时间才解决。

CreateWindowEx的调用失败,返回0. GetLastError,之后立即调用,也返回0.

当我在DefWindowProc上设置断点时,我的调试器确认它正在被调用,应该是这样。

我在下面列出了一个最小的例子。为什么对CreateWindowEx的调用失败?

的WndProc

LRESULT CALLBACK WndProc(
        HWND hWnd,
        UINT msg,
        WPARAM wParam,
        LPARAM lParam)
{
    switch (Msg) {
    case WM_DESTROY:
        PostQuitMessage(EXIT_SUCCESS);
        return 0;
    }

    // LRESULT WINAPI DefWindowProc(HWND, UINT, WPARAM, LPARAM);
    return DefWindowProc(hWnd, msg, lParam, wParam);
}

对CreateWindowEX的调用

hWnd = CreateWindowEx(
    WS_EX_OVERLAPPEDWINDOW, // dwExStyle
    CLASS_NAME,             // lpClassName
    WINDOW_NAME,            // lpWindowName
    WS_OVERLAPPEDWINDOW,    // dwStyle
    CW_USEDEFAULT, 0,       // x, y
    CW_USEDEFAULT, 0,       // width, height
    NULL,                   // hWndParent
    NULL,                   // hMenu
    hInstance,              // hInstance
    NULL                    // lpParam
);
if (NULL == hWnd) {
    //GetLastError();
    return 1;
}

1 个答案:

答案 0 :(得分:1)

我不小心将我传递的wParamlParam值切换为DefWindowProc

以正确的顺序给出函数参数解决了我的问题。

return DefWindowProc(hWnd, msg, wParam, lParam);