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