我正在用 C++ 编写我的第一个 Win32 应用程序,我正在尝试创建 3 个窗口,根据用户单击的按钮在它们之间进行重定向。我将窗口(window1,window2,window3)初始化为主窗口hwnd的子窗口,并且仅将window1设置为可见。window1也有两个按钮,每个按钮都应该指向window2或window3。
我试图隐藏window1并使用ShowWindow()函数显示我想切换到哪个窗口。但是,它不起作用(单击按钮不会执行任何操作)。你能帮我理解为什么吗?
在我之前的另一段代码中,我没有创建 window1,按钮和其他两个窗口只是 hwnd 的子级,按下按钮确实显示了正确的窗口,但按钮仍然存在,即使它没有属于那个窗口。
此外,是否有更有效的方式在窗口之间切换(无需一次又一次地删除和创建它们?
谢谢!!!
编辑:我设法解决了我的问题。这是因为我将 Windows 1,2 和 3 声明为静态的。通过将它们声明在与 hwnd 相同的类下,我能够处理来自主 WindowProcedure() 下的按钮的消息。由于我的程序会很简单,我不需要为新窗口创建不同的程序,但是感谢评论,现在我也知道该怎么做了!
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
window1 = CreateWindow("STATIC","Window 1",WS_VISIBLE|WS_BORDER|WS_CHILD,0,0,600,600,hwnd,NULL,NULL,NULL);
window2 = CreateWindow("STATIC","Window 2",WS_BORDER|WS_CHILD,0,0,600,600,hwnd,NULL,NULL,NULL);
button2 = CreateWindow(
"BUTTON",
"SECOND WINDOW",
WS_CHILD | WS_VISIBLE | WS_BORDER,
350, 480,
200, 20,
window1, (HMENU) 2, NULL, NULL);
window3 = CreateWindow("STATIC","Window 3",WS_BORDER|WS_CHILD,0,0,600,600,hwnd,NULL,NULL,NULL);
button3 = CreateWindow(
"BUTTON",
"THIRD WINDOW",
WS_CHILD | WS_VISIBLE | WS_BORDER,
50, 480,
200, 20,
window1, (HMENU) 3, NULL, NULL);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case 2:
ShowWindow(window1,SW_HIDE);
ShowWindow(window2,SW_SHOW);
break;
case 3:
ShowWindow(window1,SW_HIDE);
ShowWindow(window3,SW_SHOW);
break;
}
break;
case WM_DESTROY:
PostQuitMessage (0); /* send a WM_QUIT to the message queue */
break;
default: /* for messages that we don't deal with */
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}