我有一个有 5 个子窗口的窗口。如何在不关闭父窗口的情况下关闭子窗口?
DestroyWindow
。
编辑:
您应该在主“窗口”中定义一个 WndProc 方法来处理来自子窗口的回调。您可以使用它来定义要对每条消息执行的操作。在你的情况下,你想调用 destroyWindow。
类似这样的:
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
这件事就发生在我身上。我在为子窗口注册的窗口过程中添加了一个案例
WM_DESTROY
。这导致我的整个应用程序退出。删除后,一切正常。
我遇到了同样的问题,所以我这样做来解决它:
创建一个全局句柄变量,它将用作主父窗口的引用。
HWND mainHwnd;
在首先创建父窗口的程序的主函数中,我这样做了:
mainHwnd = CreateWindowW( /* your window setup here */ );
然后,在 LRESULT 方法中我这样做了:
LRESULT CALLBACK AboutWindowProcedure(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
switch(msg){
case WM_COMMAND:{
switch(wParam){
case BTN_ABOUT_CLOSE:
EnableWindow(mainHwnd, true); // => THIS IS THE SOLUTION
DestroyWindow(hWnd);
break;
}
break;
}
case WM_CREATE:{
// WHATEVER HAPPENS HERE...
break;
}
case WM_CLOSE:{
EnableWindow(mainHwnd, true); // => AND HERE TOO, IN CASE USER CLOSES THE WINDOW USING THE X BUTTON
DestroyWindow(hWnd);
break;
}
default:{
return DefWindowProcW(hWnd, msg, wParam, lParam);
}
}
return 0;
}
我希望它有帮助。快乐编码!