销毁当前窗口并创建一个新窗口

时间:2014-03-30 20:31:55

标签: c winapi window

我有一个用WinAPI编写的程序。 我有登录窗口,然后是实际的程序窗口。 我想破坏登录窗口,并创建新窗口..

我一直在用这个:

销毁程序:

    DestroyWindow(MainHwnd);

和窗口的WndProc(MainHwnd窗口):

LRESULT Client::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
    case WM_CREATE:
    break;

    case WM_COMMAND:
    break;

    case WM_CLOSE:
        DestroyWindow(hwnd);
    break;

    case WM_DESTROY:
        PostQuitMessage(1);
    break;

    default:
        return DefWindowProc(hwnd, msg, wParam, lParam);
}

return 0;
}

StackOverflow中的人们在我之前的问题中告诉我,我当前正在摧毁窗口,而且我正在导致Stack Overflow结束窗口被破坏的地方(程序仍在运行 - 所以看起来就像一切正如计划一样),但我不想使用糟糕的编程(特别是导致堆栈溢出破坏窗口哈哈)

那么,我怎样才能正确销毁窗户呢?

另外,有时候,当我使用DestroyWindow(MainHwnd)时,它会进入WM_DESTROYWM_CLOSE(在我上面发布的当前WndProc中)..这是否与Stack Overflow相关问题?

顺便说一下 - 我也知道如何在#C中使用Windows窗体,我正在尝试写一些类似的东西: 关闭当前窗口的this.Close();(也许这会让我的问题更加明确)......

谢谢!

1 个答案:

答案 0 :(得分:1)

从微软关于WM_CLOSE

An application can prompt the user for confirmation, prior to destroying a window, by processing the WM_CLOSE message and calling the DestroyWindow function only if the user confirms the choice. By default, the DefWindowProc function calls the DestroyWindow function to destroy the window.

因此,调用DestroyWindow(hwnd);是否相同。

LRESULT Client::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CREATE:
            break;

        case WM_COMMAND:
            break;

        case WM_CLOSE:
            //DestroyWindow(hwnd);
            break;

        or

        case WM_CLOSE:
            DestroyWindow(hwnd);
            return 0;

        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;

        default:
           return DefWindowProc(hwnd, msg, wParam, lParam);
    }

    return DefWindowProc(hwnd, msg, wParam, lParam);
}

查看示例closing window

基本上就是我所说的。

瓦尔特