Hallo,
ich programmiere mit der WinAPI unter Windows und möchte ein Programm erstellen, welches 2 Fenster erzeugt.
Wenn ich auf einen bestimmten Button klicke, soll sich ein Art "Child-Fenster" öffnen, aber eben nicht als Child. Es soll nicht in dem eigentlichen Fenster angezeigt werden,
sondern ein eigenes Fenster sein. In dem Fenster will ich später dann Bilder anzeigen lassen.
Momentan kann ich schon das Fenster erzeugen und anzeigen lassen, aber sobald es da ist, können keine Message-Boxen angezeigt werden.
Wenn ich dann mithilfe von ShowWindow() das Fenster wieder ausblende, kommen alle Message-Boxen wieder. Aber solange es angezeigt wird kommen sie nicht.
Zudem liegt das Fenster immer über meinem Hauptfenster. Wie bringe ich es hinter mein Hauptfenster?
Zum besseren Verständnis der Quellcode:
Danke schon mal für jede Hilfe.
P.S.: Bei google habe ich nichts gefunden oder falsch gesucht. Ebenfalls hier im Forum.
ich programmiere mit der WinAPI unter Windows und möchte ein Programm erstellen, welches 2 Fenster erzeugt.
Wenn ich auf einen bestimmten Button klicke, soll sich ein Art "Child-Fenster" öffnen, aber eben nicht als Child. Es soll nicht in dem eigentlichen Fenster angezeigt werden,
sondern ein eigenes Fenster sein. In dem Fenster will ich später dann Bilder anzeigen lassen.
Momentan kann ich schon das Fenster erzeugen und anzeigen lassen, aber sobald es da ist, können keine Message-Boxen angezeigt werden.
Wenn ich dann mithilfe von ShowWindow() das Fenster wieder ausblende, kommen alle Message-Boxen wieder. Aber solange es angezeigt wird kommen sie nicht.
Zudem liegt das Fenster immer über meinem Hauptfenster. Wie bringe ich es hinter mein Hauptfenster?
Zum besseren Verständnis der Quellcode:
Code:
#include <windows.h>
LRESULT CALLBACK MainProc(HWND, UINT, WPARAM, LPARAM); //Hauptfenster
LRESULT CALLBACK AnzeigeProc(HWND, UINT, WPARAM, LPARAM);
const char szMainname[] = "Programm";
const char szAnzeige[] = "Bild Anzeige";
int iWindowX = 760; //16:10 Format
int iWindowY = 475;
int iButtonX = 220;
int iButtonY = 35;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
WNDCLASS wc;
HWND hWnd;
MSG msg;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = MainProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, "Icon.ico");
wc.hbrBackground = CreateSolidBrush(RGB(0, 0, 0));
wc.lpszClassName = szMainname;
wc.lpszMenuName = NULL;
RegisterClass(&wc);
wc.hbrBackground = CreateSolidBrush(RGB(0, 0, 0));
wc.hIcon = NULL;
wc.lpfnWndProc = AnzeigeProc;
wc.lpszClassName = szAnzeige;
RegisterClass(&wc);
hWnd = CreateWindow(szMainname,
szMainname,
WS_OVERLAPPED | WS_SYSMENU,
GetSystemMetrics(SM_CXSCREEN) / 2 - iWindowX / 2,
GetSystemMetrics(SM_CYSCREEN) / 2 - iWindowY / 2,
iWindowX,
iWindowY,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK MainProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static RECT rect;
//Anzeige Fenster...
static HWND hhAnzeige;
//Buttons...
static HWND hbBild_EIN;
static HWND hbBild_AUS;
static HWND hbMSG;
switch(message)
{
case WM_CREATE:
{
//Anzeige Fenster...
hhAnzeige = CreateWindow(szAnzeige,
szAnzeige,
WS_OVERLAPPED,
0,
0,
0,
0,
hWnd,
NULL,
((LPCREATESTRUCT) lParam)->hInstance,
NULL);
//Buttons...
hbBild_EIN = CreateWindow("button",
"EIN",
WS_CHILD | WS_VISIBLE,
0,
0,
0,
0,
hWnd,
NULL,
((LPCREATESTRUCT) lParam)->hInstance,
NULL);
hbBild_AUS = CreateWindow("button",
"AUS",
WS_CHILD | WS_VISIBLE,
0,
0,
0,
0,
hWnd,
NULL,
((LPCREATESTRUCT) lParam)->hInstance,
NULL);
hbMSG = CreateWindow("button",
"Message",
WS_CHILD | WS_VISIBLE,
0,
0,
0,
0,
hWnd,
NULL,
((LPCREATESTRUCT) lParam)->hInstance,
NULL);
return 0;
}
case WM_SIZE:
{
rect.right = LOWORD(lParam);
rect.bottom = HIWORD(lParam);
MoveWindow(hbBild_EIN, rect.right / 2 - 60, rect.bottom / 2 - 50, 120, iButtonY, TRUE);
MoveWindow(hbBild_AUS, rect.right / 2 - 60, rect.bottom / 2, 120, iButtonY, TRUE);
MoveWindow(hbMSG, rect.right / 2 - 60, rect.bottom / 2 + 50, 120, iButtonY, TRUE);
MoveWindow(hhAnzeige, 10, 10, 100, 50, TRUE);
ShowWindow(hhAnzeige, SW_HIDE);
return 0;
}
case WM_COMMAND:
{
if(lParam == (LPARAM)hbBild_EIN)
{
if(HIWORD(wParam) == BN_CLICKED)
{
ShowWindow(hhAnzeige, SW_SHOW);
}
}
if(lParam == (LPARAM)hbBild_AUS)
{
if(HIWORD(wParam) == BN_CLICKED)
{
ShowWindow(hhAnzeige, SW_HIDE);
}
}
if(lParam == (LPARAM)hbMSG)
{
if(HIWORD(wParam) == BN_CLICKED)
{
MessageBox(NULL, "Irgendein Text.", "test", MB_ICONERROR | MB_OK | MB_DEFBUTTON1);
}
}
return 0;
}
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
LRESULT CALLBACK AnzeigeProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static RECT rect;
SIZE size;
HDC hDC;
PAINTSTRUCT ps;
switch(message)
{
case WM_SIZE:
{
rect.right = LOWORD(lParam);
rect.bottom = HIWORD(lParam);
return 0;
}
case WM_PAINT:
{
return 0;
}
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
Danke schon mal für jede Hilfe.
P.S.: Bei google habe ich nichts gefunden oder falsch gesucht. Ebenfalls hier im Forum.