Sådan viser du et andet vindue på en knap, tryk på C ++

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har lavet mange små projekter, der tester nogle funktioner, før jeg laver et stort program, der gør alt. Dette program har to identiske vinduer. De ser sådan ud:


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
       );


Et af vinduerne har en knap, der siger 'Vis' på den.



Når jeg rammer 'Vis', vil jeg gerne Win2 pop op ved siden af ​​Win1. Jeg vil gerne gøre alt i samme switch(message) løkke for at undgå at overføre variabler gennem flere sløjfer. Sådan forsøgte jeg at gøre Win2 pop op:


(Jeg inkluderede kun den vigtige del af koden)


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);
}


Desværre virker dette ikke. Hvordan kan jeg få Win2 til at vises uden en anden switch(message) loop?


Hvis hele min kode nødvendig, er det her: KLIK MIG! [13]


Enhver hjælp ville blive værdsat.


-Tak

Bedste reference


Dit problem kan løses af:



  • Lav hWnd1 og hWnd2 globalt. Jeg tror ikke, at din kode fungerer, fordi
    du de er erklæret i WinMain men kaldes fra vinduet Procedure.



så en prøve af koden vil se ud:


#include <tchar.h>
#include <windows.h>

HWND hwnd;               /* This will be Win1  in global scope*/
HWND hwnd2;              /* This will be Win2  global scope*/
// ...


I Window Procedure ændres nCmdShow til SW\_SHOWNORMAL eller SW\_SHOW:


case WM\_COMMAND:
    switch (LOWORD(wParam)){
        case 1:
            ShowWindow (hwnd2, SW\_SHOWNORMAL);
                break;
   }


pause;