#include "stdafx.h"
#include "resource.h"
HINSTANCE g_hInstance = 0;
HWND g_hMDI = 0;//MDICLIENT窗口句柄。
/*窗口处理函数*/
LRESULT CALLBACK WindowProc( HWND hWnd, UINT uMsg,
WPARAM wParam, LPARAM lParam ){
switch( uMsg ){
case WM_DESTROY:
PostQuitMessage( 0 );
break;
}
return DefFrameProc( hWnd, g_hMDI, uMsg, wParam, lParam );
}
/*子窗口的窗口处理函数*/
LRESULT CALLBACK ChildProc( HWND hWnd, UINT uMsg,
   WPARAM wParam, LPARAM lParam ){
return DefMDIChildProc( hWnd, uMsg, wParam, lParam );
}
/*注册窗口类*/
BOOL Register( LPSTR pszClassName, WNDPROC WndProc ){
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
wce.cbWndExtra = 0;
wce.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wce.hCursor = NULL;
wce.hIcon = NULL;
wce.hIconSm = NULL;
wce.hInstance = g_hInstance;
wce.lpfnWndProc = WndProc;
wce.lpszClassName = pszClassName;
wce.lpszMenuName = NULL;
wce.style = CS_HREDRAW|CS_VREDRAW;
ATOM nAtom = RegisterClassEx( &wce );
if( nAtom == 0 ){
return FALSE;
}
return TRUE;
}
/*创建窗口*/
HWND Create( LPSTR pszClassName, LPSTR pszWndName ){
HWND hWnd = CreateWindowEx( 0, pszClassName, pszWndName,
WS_OVERLAPPEDWINDOW, 
CW_USEDEFAULT, CW_USEDEFAULT, 
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, g_hInstance, NULL );
return hWnd;
}
/*创建MDICLIENT窗口*/
void CreateMdiClient( HWND hWnd ){
CLIENTCREATESTRUCT ccs = { 0 };
ccs.hWindowMenu = MAKEINTRESOURCE(IDR_MENU1);//为什么加不上菜单呢????
ccs.idFirstChild = 1000;
g_hMDI = CreateWindowEx( WS_EX_CLIENTEDGE, 
"MDICLIENT", "",
WS_CHILD|WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
hWnd, NULL, g_hInstance, &ccs );
}/*创建MDICLIENT窗口的子窗口*/
void CreateChild( LPSTR pszClassName, HWND hParent ){
CreateWindowEx( WS_EX_MDICHILD, pszClassName, "",
WS_CHILD|WS_VISIBLE, 100, 100,
300, 300, hParent, NULL,
g_hInstance, NULL );
}/*显示窗口*/
void Display( HWND hWnd ){
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
/*消息循环*/
void Message( ){
MSG nMsg = { 0 };
while( GetMessage( &nMsg, NULL, 0, 0 ) ){
TranslateMessage( &nMsg );
DispatchMessage( &nMsg );
}
}
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
g_hInstance = hInstance;
BOOL nRet = Register( "Main", (WNDPROC)WindowProc );
if( nRet == 0 ){
MessageBox( NULL, "注册失败", "Infor", MB_OK );
return 0;
}
HWND hMain = Create( "Main", "主窗口" );
CreateMdiClient( hMain );
Register( "CHILD", (WNDPROC)ChildProc );
CreateChild( "CHILD", g_hMDI );
Display( hMain );
Message( );
return 0;
}