Bringe mein MDI Fenster nicht zum erscheinen
-
Hi,
ich hab ein kleines Problem mit einem MDI Fenster.
Zuerst mal der Quelltext:#include <windows.h> #define IDM_FIRSTCHILD 5947375 wchar_t name[]=L"LIBTEST"; wchar_t mdin[]=L"MDI"; __w64 long __stdcall WndProc (HWND hwnd, unsigned int message, __w64 unsigned int wParam, __w64 long lParam); __w64 long __stdcall ViewProc(HWND hwnd, unsigned int message, __w64 unsigned int wParam, __w64 long lParam); int WINAPI WinMain (HINSTANCE__* hInstance, HINSTANCE__* hPrevInstance, char *szCmdLine, int iCmdShow) { HACCEL hAccel; MSG msg; WNDCLASSW wndclass; HWND hwnd, hwnd_client; HDC hdc = NULL; ZeroMemory(&hwnd, sizeof(HWND__*)); ZeroMemory(&msg, sizeof(MSG)); ZeroMemory(&wndclass, sizeof(WNDCLASSW)); wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance ; wndclass.hIcon = NULL ; wndclass.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = name; if(RegisterClass(&wndclass)) { MessageBoxW(hwnd, L"Die Anwendung konnte nicht richtig initalisiert werden. Wenn es nicht klappt beten sie ein bisschen vielleicht klappts dann! ;-)", L"Error", MB_OK); return 0; } wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = ViewProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance ; wndclass.hIcon = NULL ; wndclass.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = L"View"; if (!RegisterClass(&wndclass)) { MessageBoxW(hwnd, L"Die Anwendung konnte nicht richtig initalisiert werden. Wenn es nicht klappt beten sie ein bisschen vielleicht klappts dann! ;-)", L"Error", MB_OK); return 0; } hAccel = LoadAccelerators(hInstance,name); hwnd = CreateWindow (name, name, WS_SYSMENU|WS_CAPTION , CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL); hwnd_client = GetWindow(hwnd, GW_CHILD); ShowWindow (hwnd, iCmdShow); UpdateWindow (hwnd); while (GetMessage (&msg, NULL, 0, 0)) { if(!TranslateMDISysAccel(hwnd_client,&msg) && !TranslateAccelerator(hwnd,hAccel,&msg)) { TranslateMessage (&msg); DispatchMessage (&msg); } } return (static_cast<int>(msg.wParam)); } __w64 long __stdcall WndProc (HWND__* hwnd, unsigned int message, __w64 unsigned int wParam, __w64 long lParam) { CLIENTCREATESTRUCT clientcreate; static HWND hwnd_client; HWND hwnd_child; MDICREATESTRUCT mdicreate; HINSTANCE hInst = NULL; switch (message) { case WM_CREATE: clientcreate.idFirstChild = IDM_FIRSTCHILD; hwnd_client = CreateWindow (TEXT ("MDICLIENT"), NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE, 10, 10, 100, 100, hwnd, 0, hInst, (PSTR) &clientcreate) ; mdicreate.szClass = L"HALLO" ; mdicreate.szTitle = TEXT ("Hello") ; mdicreate.hOwner = hInst ; mdicreate.x = 10 ; mdicreate.y = 10 ; mdicreate.cx = 100 ; mdicreate.cy = 100 ; mdicreate.style = 0 ; mdicreate.lParam = 0 ; hwnd_child = (HWND) SendMessage (hwnd_client, WM_MDICREATE, 0, (LPARAM) (LPMDICREATESTRUCT) &mdicreate) ; break; case WM_DESTROY: PostQuitMessage(0); MessageBeep(50); break; } return DefFrameProc (hwnd, hwnd_client, message, wParam, lParam) ; } __w64 long __stdcall ViewProc(HWND hwnd, unsigned int message, __w64 unsigned int wParam, __w64 long lParam) { static HWND hwnd_client, hwndFrame ; switch (message) { case WM_CREATE: hwnd_client = GetParent (hwnd) ; hwndFrame = GetParent (hwnd_client) ; break; case WM_DESTROY: PostQuitMessage(0); MessageBeep(50); break; } return DefWindowProc (hwnd, message, wParam, lParam); }
Das Fenster erscheint wie erwartet aber es wird seltsamerweise kein MDI Fenster angezeigt!
Ich bitte euch um Hilfe und bin euch über jede Hilfe dankbar
Schon mal danke im vorrausMultiple Document Interf.
-
Hat sich im ICQ ja geklärt, hier aber nochmal ein simples Beispiel:
#include <windows.h> // Globaler Unsinn // const TCHAR applicationClassName[] = TEXT( "MainFrm" ); const TCHAR mdiChildClassName[] = TEXT( "MDIChildFrm" ); enum { IDM_FIRSTCHILD = 0xff }; // Forwarddeclarations // LRESULT APIENTRY WndProc( HWND, UINT, WPARAM, LPARAM ); LRESULT APIENTRY WndProcMDIChild( HWND, UINT, WPARAM, LPARAM ); int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow ) { MSG msg; // Mainframe registrieren // WNDCLASSEX cls = { sizeof( WNDCLASSEX ), CS_VREDRAW | CS_HREDRAW, WndProc, 0, 0, hInstance, LoadIcon( NULL, IDI_APPLICATION ), LoadCursor( NULL, IDC_ARROW ), GetSysColorBrush( COLOR_BTNFACE ), NULL, applicationClassName, LoadIcon( NULL, IDI_APPLICATION ) }; if ( !RegisterClassEx( &cls ) ) { MessageBox( NULL, TEXT( "Fehler beim registrieren der Klasse 'MainFrm'" ), TEXT( "Error" ), MB_OK | MB_ICONERROR ); return 0; } // MDI Child Frame registrieren // cls.lpfnWndProc = WndProcMDIChild; cls.hIcon = NULL; cls.lpszClassName = mdiChildClassName; if ( !RegisterClassEx( &cls ) ) { MessageBox( NULL, TEXT( "Fehler beim registrieren der Klasse 'MDIChildFrm'" ), TEXT( "Error" ), MB_OK | MB_ICONERROR ); return 0; } // Fenster erzeugen // HWND hWnd = CreateWindowEx( NULL, applicationClassName, TEXT( "My MDI Application" ), WS_OVERLAPPEDWINDOW, 0, 0, 800, 600, NULL, NULL, hInstance, NULL ); HWND hWndMDIClient = GetWindow( hWnd, GW_CHILD ); ShowWindow( hWnd, SW_SHOW ); UpdateWindow( hWnd ); while ( GetMessage( &msg, NULL, 0, 0 ) ) { if ( !TranslateMDISysAccel( hWndMDIClient, &msg ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } } return static_cast< int >( msg.wParam ); } LRESULT APIENTRY WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch ( uMsg ) { case WM_CREATE: { // MDI Client erzeugen // CLIENTCREATESTRUCT ccs = { NULL, IDM_FIRSTCHILD }; HINSTANCE hInstance = GetModuleHandle( NULL ); HWND hWndClient = CreateWindowEx( NULL, TEXT( "MDICLIENT" ), NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, NULL, hInstance, ( LPSTR )&ccs ); ShowWindow( hWndClient, SW_SHOW ); // MDI Child hinzufuegen // MDICREATESTRUCT childFrm = { mdiChildClassName, TEXT( "Foobar" ), hInstance, 0, 0, 200, 200, 0, 0 }; SendMessage( hWndClient, WM_MDICREATE, 0, ( LPARAM )( LPMDICREATESTRUCT )&childFrm ); } break; case WM_DESTROY: PostQuitMessage( 0 ); break; case WM_SIZE: { HWND hWndMDIClient = GetWindow( hWnd, GW_CHILD ); RECT rect; GetClientRect( hWnd, &rect ); SetWindowPos( hWndMDIClient, NULL, 0, 0, rect.right, rect.bottom, SWP_NOZORDER ); } break; } return DefWindowProc( hWnd, uMsg, wParam, lParam ); } LRESULT APIENTRY WndProcMDIChild( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { return DefWindowProc( hWnd, uMsg, wParam, lParam ); }