在制作一个可以完成所有工作的大型程序之前,我已经做了很多小型项目测试了一些功能。该程序有两个相同的窗口。它们看起来像这样:
hwnd = CreateWindowEx (
0,
szClassName,
_T("Win1"),
WS_SYSMENU | WS_MINIMIZEBOX,
CW_USEDEFAULT,
CW_USEDEFAULT,
400,
400,
HWND_DESKTOP,
NULL,
hThisInstance,
NULL
);
hwnd2 = CreateWindowEx (
0,
szClassName,
_T("Win2"),
WS_SYSMENU | WS_MINIMIZEBOX,
CW_USEDEFAULT,
CW_USEDEFAULT,
400,
400,
HWND_DESKTOP,
NULL,
hThisInstance,
NULL
);
其中一个窗口有一个按钮,显示"显示"在上面。
当我点击" Show"我希望Win2能够在Win1旁边弹出。我想在同一个switch(message)
循环中执行所有操作,以避免通过多个循环传递变量。这就是我试图让Win2弹出的原因:
(我只包括代码的重要部分)
switch(message)
{
case WM_COMMAND:
switch (LOWORD(wParam))
{
case 1:
ShowWindow (hwnd2, nCmdShow);
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
不幸的是,这不起作用。如何在没有第二个switch(message)
循环的情况下显示Win2?
如果需要我的完整代码,请点击此处:Is AVX enabled?
任何帮助都将不胜感激。
-Thanks
答案 0 :(得分:1)
您的问题可以通过以下方式解决:
hWnd1
和hWnd2
。我不认为你的代码有效,因为
你在WinMain
中声明它们,但是从窗口过程调用过程。所以代码示例如下:
#include <tchar.h>
#include <windows.h>
HWND hwnd; /* This will be Win1 in global scope*/
HWND hwnd2; /* This will be Win2 global scope*/
// ...
在窗口过程中将nCmdShow
更改为SW_SHOWNORMAL
或SW_SHOW
:
case WM_COMMAND:
switch (LOWORD(wParam)){
case 1:
ShowWindow (hwnd2, SW_SHOWNORMAL);
break;
}
中断;