本文是:Windows编程基础 第三章 基本窗口创建过程 MDI窗口创建
本文的下载地址是:http://yunpan.cn/cd5bbEpziR7nB 访问密码 c4d1
// windows04.cpp : 定义应用程序的入口点。
//MDI窗口的实现代码如下:
#include "stdafx.h"
#include "windows04.h"
HINSTANCE g_hInst=NULL;
HWND g_hMulClient=NULL;
BOOL RegisterWnd(TCHAR * pszClassName,WNDPROC lpfnWndProc,int nBrush)
{
WNDCLASSEX wce={0};
wce.cbClsExtra=0;
wce.cbWndExtra=0;
wce.hbrBackground=(HBRUSH)(nBrush);
wce.hCursor=NULL;
wce.hIcon=NULL;
wce.hInstance=g_hInst;
wce.lpfnWndProc=lpfnWndProc;
wce.lpszClassName=pszClassName;
wce.lpszMenuName=NULL;
wce.style=CS_VREDRAW|CS_HREDRAW;
wce.hIconSm=NULL;
wce.cbSize=sizeof(wce);
ATOM result=RegisterClassEx(&wce);
if (result==0)
{
MessageBox(NULL,TEXT("注册窗口类失败!"),TEXT("注册失败!"),MB_OK);
return FALSE;
}
return TRUE;
}
LRESULT CALLBACK MainWndProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParma)
{
switch(nMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefFrameProc(hWnd,g_hMulClient,nMsg,wParam,lParma);
}
LRESULT CALLBACK ChildProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParma)
{
return DefMDIChildProc(hWnd,nMsg,wParam,lParma);
}
VOID Display(HWND hWnd)
{
ShowWindow( hWnd,SW_SHOW);
UpdateWindow(hWnd);
}
VOID Message()
{
MSG msg={0};
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
//创建主窗口
HWND CreateMainWindow(TCHAR * pszClassName)
{
HWND hWnd=CreateWindowEx(0,pszClassName,TEXT("主窗口"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,g_hInst,NULL);
return hWnd;
}
//创建MDIClient
HWND CreateMDIClient(HWND hParent)
{
CLIENTCREATESTRUCT cs={0};
cs.idFirstChild=1;
HWND hWnd=CreateWindowEx(0,TEXT("MDICLIENT"),
TEXT("主窗口客户区"),
WS_CHILD|WS_VISIBLE,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
hParent,
NULL,
g_hInst,
&cs);
return hWnd;
}
//创建MDI子窗体
HWND CreateChildWindow(TCHAR * pszClassName,HWND hParent)
{
HWND hWnd=CreateWindowEx(WS_EX_MDICHILD,pszClassName,TEXT("子窗体"),WS_CHILD|WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,hParent,NULL,g_hInst,NULL);
return hWnd;
}
int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd )
{
RegisterWnd(TEXT("MainWnd"),MainWndProc,COLOR_BTNFACE+1);
RegisterWnd(TEXT("ChildWnd"),ChildProc,COLOR_BTNFACE+1);
HWND hMainWnd=CreateMainWindow(TEXT("MainWnd"));
g_hMulClient=CreateMDIClient(hMainWnd);
HWND hChild1=CreateChildWindow(TEXT("ChildWnd"),g_hMulClient);
HWND hChild2=CreateChildWindow(TEXT("ChildWnd"),g_hMulClient);
HWND hChild3=CreateChildWindow(TEXT("ChildWnd"),g_hMulClient);
Display(hMainWnd);
MoveWindow(hChild1,100,100,100,100,TRUE);
MoveWindow(hChild2,200,200,100,100,TRUE);
MoveWindow(hChild3,300,300,100,100,TRUE);
Message();
return TRUE;
}
// windows03.cpp : 定义应用程序的入口点。
//本程序演示:类的附加数据和窗口的附加数据
#include "stdafx.h"
#include "windows03.h"
HINSTANCE g_hInst=NULL;
BOOL RegisterWnd(LPCWSTR pszClassName,WNDPROC lpfnWndProc,int nBrush)
{
WNDCLASSEX wce={0};
wce.cbClsExtra=0;
wce.cbSize=sizeof(wce);
wce.cbWndExtra=0;
wce.hbrBackground=(HBRUSH)(nBrush);
wce.hCursor=NULL;
wce.hIcon=NULL;
wce.hIconSm=NULL;
wce.hInstance=g_hInst;
wce.lpfnWndProc=lpfnWndProc;
wce.lpszClassName=pszClassName;
wce.lpszMenuName=NULL;
wce.style=CS_HREDRAW|CS_VREDRAW;
ATOM result=RegisterClassEx(&wce);
if (result==0)
{
MessageBox(NULL,L"窗口类注册失败!",L"窗口类注册失败!",MB_OK);
return FALSE;
}
return TRUE;
}
LRESULT CALLBACK MainWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
LRESULT CALLBACK ChildWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
VOID Message()
{
MSG msg={0};
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
VOID DisplayWindow(HWND hWnd)
{
ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
}
HWND CreateMyWindow(LPCWSTR pszClassName,DWORD dwStyle,HWND ParenthWnd)
{
HWND hWndNew=CreateWindowEx(0,pszClassName,L"新建窗口",dwStyle,100,100,200,200,ParenthWnd,NULL,g_hInst,NULL);
return hWndNew;
}
int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd )
{
g_hInst=hInstance;
RegisterWnd(L"Main",MainWndProc,COLOR_BTNFACE+1);
RegisterWnd(L"Child",ChildWndProc,COLOR_WINDOW);
RegisterWnd(L"Child1",ChildWndProc,COLOR_WINDOW);
RegisterWnd(L"Child2",ChildWndProc,COLOR_WINDOW);
HWND hWnd=CreateMyWindow(L"Main",WS_OVERLAPPEDWINDOW,NULL);
HWND hChild1=CreateMyWindow(L"Child",WS_OVERLAPPEDWINDOW|WS_CHILD|WS_VISIBLE,hWnd);//WS_THICKFRAME|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX
HWND hChild2=CreateMyWindow(L"Child1",WS_OVERLAPPEDWINDOW|WS_POPUP|WS_VISIBLE,hWnd);
HWND hChild3=CreateMyWindow(L"Child2",WS_OVERLAPPEDWINDOW|WS_CHILD|WS_VISIBLE,hWnd);//WS_THICKFRAME|WS_CAPTION|WS_SYSMENU
DisplayWindow(hWnd);
//MoveWindow(hChild1,50,50,600,600,TRUE);
MoveWindow(hChild1,100,100,200,200,TRUE);
MoveWindow(hChild2,200,200,400,400,TRUE);
MoveWindow(hChild3,400,400,600,600,TRUE);
Message();
return TRUE;
}