Windows编程基础 第三章 基本窗口创建过程 MDI窗口创建

本文是: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;
}



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值