MDI - Warum geht es nicht?
-
Hi!
Ja, ich habe schon die Suchfunktion benutzt - aber da kam ich auch nicht viel weiter.Hier werden die Klassen registriert:
WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInst; wcex.hIcon = LoadIcon (hInst, (LPCTSTR)IDI_MAINLARGE); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = CreateSolidBrush( RGB(128, 128, 128) ); wcex.lpszMenuName = (LPCSTR)IDR_MAINMENU; wcex.lpszClassName = MainClassName; wcex.hIconSm = LoadIcon (hInst, (LPCTSTR)IDI_MAINSMALL); if (!RegisterClassEx(&wcex)) return FALSE; //-------- wcex.lpfnWndProc = (WNDPROC)MapWindowProc; wcex.lpszClassName = MapClassName; wcex.lpszMenuName = NULL; if (!RegisterClassEx(&wcex)) return FALSE; //-------- return TRUE;Hier wird das MDIClient-Control erstellt:
CLIENTCREATESTRUCT ccs; ccs.hWindowMenu = GetSubMenu(GetMenu(hWnd), 0); ccs.idFirstChild = 1000; hMDIClient = CreateWindow("MDICLIENT", "", WS_CHILD | WS_CLIPCHILDREN | WS_HSCROLL | WS_VSCROLL | WS_VISIBLE, 150, 0, 440, 480, hWnd, NULL, hInst, &ccs);Hier wird das Fenster erstellt (Name der Klasse stimmt)
MDICREATESTRUCT mcs; mcs.x = 10; mcs.y = 10; mcs.cx = width; mcs.cy = height; mcs.hOwner = App->hInst; mcs.style = WS_CHILD | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX; mcs.szClass= MapClassName; mcs.szTitle= Caption; mcs.lParam = NULL; MessageBox(NULL, MyClassName, Caption, 64); Handle = (HWND) SendMessage (ParentHandle, WM_MDICREATE, 0, (LONG) (LPMDICREATESTRUCT) &mcs); if (!Handle) MessageBox(NULL, "Fenster kann nicht erstellt werden","Fehler",16); if (!Handle) return;Dennoch bekomme ich den Fehler, dass das Fenster nicht erstellt werden konnte..
Oder muss hier noch was rein?
LRESULT CALLBACK MapWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { return false; }
-
Ich glaub ich sollte mir mal ne Brille kaufen. Zu bekloppt x.x
default: return DefMDIChildProc(hWnd, message, wParam, lParam);Mit dem sollte es dann doch gehen...
Thread kann geschlossen / gelöscht (whatever) werdeen.
-
Wenn du in der WindowProc-Funktion ständig 'false' zurück gibst brauchst du dich nicht wundern wenn es nicht funktioniert

So sollte es funktionieren; wenn nicht, dann muss es noch wo anders Fehler geben.
LRESULT CALLBACK MapWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { /*case: . . .*/ case WM_DESTROY: PostQuitMessage(0); return 0; } return DefFrameProc(hWnd, hWndClient, message, wParam, lParam); }