Mit dem Wissen, das wir nun haben, stellt es uns vor kein Problem, zwei Fenster anzuzeigen. Wir brauchen dazu einfach nur zwei Nachrichtenfunktionen, für jedes Fenster eine. Alles andere können wir 1:1 aus den vorangegangenen Kapiteln übernehmen.
Also erzeugen wir erst einmal unsere zwei Fenster:
{Struktur mit Infos für Fenster 1 füllen} wc.hInstance := hInstance; wc.hIcon := LoadIcon(hInstance,MAKEINTRESOURCE(100)); wc.hCursor := LoadCursor(0, IDC_ARROW);
{Fenster 1 registrieren} RegisterClassEx(wc);
{Fenster 1 erzeugen und hWnd1 zuweisen} CreateWindowEx(0, ClassName1, Window1Name, WS_VISIBLE or WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WindowWidth1, WindowHeight1, 0, 0, hInstance, nil);
{Struktur mit Infos für Fenster 2 füllen} wc.hInstance := hInstance; wc.lpfnWndProc := @Wnd2Proc; //Fensterfunktion für Fenster 2 wc.hIcon := LoadIcon(0, IDI_INFORMATION); wc.hCursor := LoadCursor(0, IDC_ARROW); wc.lpszClassName := ClassName2; //Klassenname für Fenster 2
{Fenster 2 registrieren} RegisterClassEx(wc);
Was fehlt in diesem Code?
Genau. Das zweite Fenster wurde zwar registriert, aber es wurde noch nicht mit "CreateWindowEx" erzeugt. Das machen wir erst auf Knopfdruck, nachdem der Anwender den Button angeklickt hat.
WM_COMMAND:
begin
if hiword(wParam) = BN_CLICKED then
case loword(wParam) of
IDC_BUTTON1:
{Fenster 2 erzeugen und anzeigen}
hwnd2 := CreateWindowEx(0, ClassName2, Window2Name,
WS_OVERLAPPEDWINDOW or WS_VISIBLE, 40, 10,
300, 200, hWnd1, 0, hInstance, nil);
end;
end;