窗体的创建过程

Win32应用程序与Win32控制台程序的不同之处在于:

①  Win32应用程序以WinMain()为主函数,可以使用所有Win32API

②  Win32控制台程序以main()为主函数,不能使用GDI函数

         Win32应用程序之所以可以使用Win32API,是因为引入了Windows.h,从而包含了数据类型定义与API的入口点。

         在VS中创建一个空的Win32应用程序。该程序中不包含任何资源和文件,全部需要自行添加。

         首先需要添加一个main.cpp(不需要头文件)。在该文件中添加一个WinMain()函数用于程序入口点。

         WinMain()函数结构如下:

         也就是说WinMain()函数包含三部分:

①  定义并注册窗口类

②  创建并显示窗口

③  启动消息循环

        

源码:

#include <Windows.h>
#include "tchar.h"

static LPCWSTR szAppName	=	_T("Demo_Class");	//主窗口名

LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam, LPARAM lParam);
BOOL Def_RegClass(HINSTANCE hInst);
HWND Create_ShowWnd(HINSTANCE hInst,int nCmdShow);

//主函数
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInstance, LPSTR lpszCmdParam,int nCmdShow)
{
	MSG Msg;
	if (!Def_RegClass(hInst))
	{
		return FALSE;
	}

	if (!Create_ShowWnd(hInst,nCmdShow))
	{
		return	FALSE;
	}

	//启动消息循环
	while(GetMessage(&Msg,NULL,0,0))
	{
		TranslateMessage(&Msg);
		DispatchMessage(&Msg);
	}

	return	Msg.wParam;
}

//定义并注册窗体类
BOOL Def_RegClass(HINSTANCE hInst)
{
	WNDCLASS WndClass;

	WndClass.style			=	CS_HREDRAW|CS_VREDRAW;				//窗口类样式
	WndClass.lpfnWndProc	=	WndProc;							//窗口回调函数指针
	WndClass.cbClsExtra		=	0;									//分配在窗口类结构后的字节数
	WndClass.cbWndExtra		=	0;									//分配在窗口实例后的字节数
	WndClass.hInstance		=	hInst;								//定义窗口类的应用程序的实例句柄
	WndClass.hIcon			=	LoadIcon(NULL,IDI_APPLICATION);		//窗口类的图标
	WndClass.hCursor		=	LoadCursor(NULL,IDC_ARROW);			//窗口类的光标
	WndClass.hbrBackground	=	(HBRUSH)GetStockObject(GRAY_BRUSH);	//窗口类的背景画刷
	WndClass.lpszMenuName	=	NULL;								//窗口类的菜单名
	WndClass.lpszClassName	=	szAppName;						//窗口类名

	return	(RegisterClass(&WndClass)!=0);
}

//创建并显示窗体
HWND Create_ShowWnd(HINSTANCE hInst,int nCmdShow)
{
	HWND hwnd	=	CreateWindow(	szAppName,				//窗口类名
									szAppName,				//窗口标题名
									WS_OVERLAPPEDWINDOW,	//窗口样式
									CW_USEDEFAULT,			//窗口左上角x坐标
									CW_USEDEFAULT,			//窗口左上角y坐标
									CW_USEDEFAULT,			//窗口宽
									CW_USEDEFAULT,			//窗口高
									NULL,					//窗口的父窗口句柄
									NULL,					//窗口的主菜单句柄
									hInst,					//创建窗口的应用程序当前句柄
									NULL					//指向一个传递给窗口的参数值指针
									);
	if (hwnd	==	NULL)
	{
		return	FALSE;
	}

	ShowWindow(hwnd,nCmdShow);
	UpdateWindow(hwnd);

	return	hwnd;
}

//窗口回调函数
LRESULT	CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam)
{
	switch(Message)
	{
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return	DefWindowProc(hwnd,Message,wParam,lParam);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值