gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:35:56 25 4
gpt4 key购买 nike

我有一个用 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 的人在我之前的问题中告诉我,我当前不会销毁窗口,并且会导致堆栈溢出,该堆栈溢出会在窗口被销毁的地方结束(程序仍然运行 - 所以它看起来就像一切都按计划进行一样),但我不想使用糟糕的编程(特别是导致堆栈溢出破坏窗口哈哈)

那么,如何正确销毁窗口呢?

此外,有时,当我使用 DestroyWindow(MainHwnd) 时,它会同时进入 WM_DESTROYWM_CLOSE (在当前的 WndProc 中,我有上面发布)..这与堆栈溢出问题有关吗?

顺便说一句 - 我也知道如何在 #C 中使用 Windows 窗体,我正在尝试编写如下内容:this.Close(); 关闭当前窗口(也许这让我的问题更清楚)...

谢谢!

最佳答案

来自 Microsoft 关于 WM_CLOSE 的信息:

应用程序可以在销毁窗口之前通过处理 WM_CLOSE 消息并仅在用户确认选择时调用 DestroyWindow 函数来提示用户进行确认。默认情况下,DefWindowProc函数调用DestroyWindow函数来销毁窗口。

所以调用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

基本上就是我说的。

瓦尔特

关于c - 销毁当前窗口并创建一个新窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22749455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com