如何在按下C ++的按钮上显示第二个窗口

时间:2017-05-23 20:50:48

标签: c++ windows

在制作一个可以完成所有工作的大型程序之前,我已经做了很多小型项目测试了一些功能。该程序有两个相同的窗口。它们看起来像这样:

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

1 个答案:

答案 0 :(得分:1)

您的问题可以通过以下方式解决:

  • 在全局范围内设置hWnd1hWnd2。我不认为你的代码有效,因为 你在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_SHOWNORMALSW_SHOW

case WM_COMMAND:
    switch (LOWORD(wParam)){
        case 1:
            ShowWindow (hwnd2, SW_SHOWNORMAL);
                break;
   }

中断;