Win32应用程序基本框架详解

#include 

//窗口过程的回调函数,函数名WndProc可自由定义
LRESULT CALLBACK WndProc(HWND hWnd,				//当前接收消息的窗口句柄
						 UINT uMsg,				//被传送过来的消息ID
						 WPARAM wParam,			//消息参数:附加在消息上的数据,与MSG结构体是一样
						 LPARAM lParam)			//消息参数:附加在消息上的数据
{
	switch (uMsg)
	{
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	default:
		return DefWindowProc(hWnd, uMsg, wParam, lParam);
	}
}


//应用程序入口函数WinMain()
//在 Visual Studio 2005 下则为int APIENTRY WinMain...
//在 Visual Studio 2012 下则为int CALLBACK WinMain...
int WINAPI WinMain( HINSTANCE hInstance,		//当前实例句柄		   
				   HINSTANCE hPrevInstance,		//先前实例句柄
				   LPSTR lpCmdLine,				//指向应用程序命令行的字符串指针
				   int nShowCmd)				//窗口显示方式(隐藏、最大化、最小化等)
{
	MSG Msg;
	HWND hWnd;
	WNDCLASSEX wcex;
	wcex.cbSize = sizeof(WNDCLASSEX);
	wcex.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
	wcex.lpfnWndProc = WndProc;
	wcex.cbClsExtra = 0;
	wcex.cbWndExtra = 0;
	wcex.hInstance = hInstance;
	wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground = (HBRUSH)(COLOR_WINDOWFRAME + 1);
	wcex.lpszMenuName = NULL;
	wcex.lpszClassName = "ClsName";
	wcex.hIconSm = NULL;
	
	if (!RegisterClassEx(& wcex))
	{
		return -1;
	}
	hWnd = CreateWindowEx( WS_EX_APPWINDOW,
		"ClsName",
		"WndName",
		WS_OVERLAPPEDWINDOW,
		200, 200, 500, 500,
		NULL,
		NULL,
		hInstance,
		NULL);
	if (!hWnd)
	{
		return -1;
	}
	ShowWindow(hWnd, SW_SHOW);
	while (GetMessage(& Msg, NULL, 0, 0))
	{
		TranslateMessage(& Msg);
		DispatchMessage(& Msg);
	}
	return Msg.wParam;
}


/*
WinMain()函数
int WINAPI WinMain
(
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,
	int nCmdShow
)

1、参数:
第一个参数,hInstance:应用程序当前实例的句柄。

第二个参数,hPrevlnstance:应用程序的先前实例的句柄。对于同一个程序打开两次,出现两个窗口第一次打开的窗口就是先前实例的窗口。
	对于一个32位程序,该参数总为NULL。如果需要检测另外一个实例是否已经存在,则使用CreateMutex函数创建一个独一无二的名字。
	即使互斥名已经存在,CreateMutex函数也是成功的,但是GetLastError函数将返回 ERROR_ALREADY_EXISTS,这就表明应用程序有另外
	一个实例存在,因为它首先创建了互斥名。

第三个参数,lpCmdLine:指向应用程序命令行的字符串的指针,不包括执行文件名。获得整个命令行,参看GetCommandLine。lpCmdLine是
	一个以空终止的字符串,指定传递给应用程序的命令行参数。例如:在D盘下有一个sunxin.txt文件,当我们用鼠标双击这个文件时将启
	动记事本程序(notepad.exe),此时系统会将D:\sunxin.txt作为命令行参数传递给记事本程序的WinMain函数,记事本程序在得到这个
	文件的全路径名后,就在窗口中显示该文件的内容。

第四个参数,nCmdShow:指明窗口如何显示。该参数可以是下列值之一:
	SW_HIDE:隐藏窗口并且激活另外一个窗口。
	SW_MINIMIZE:最小化指定的窗口,并且激活在系统表中的顶层窗口。
	SW_RESTORE:激活并显示窗口。如果窗口已经最小化或最大化,系统将以恢复到原来的尺寸和位置显示窗口(与SW_SHOWNORMAL相同)。
	SW_SHOW:激活一个窗口并以原来的尺寸和位置显示窗口。
	SW_SHOWMAXIMIZED:激活窗口并且将其最大化。
	SW_SHOWMINIMIZED:激活窗口并将其最小化(以图标显示)。
	SW_SHOWMINNOACTIVE:将一个窗口显示为图标。激活窗口维持活动状态。
	SW_SHOWNA:以窗口的当前状态显示窗口。激活窗口保持活动状态。
	SW_SHOWNOACTIVATE:以窗口的最近一次的尺寸和位置显示窗口。激活窗口维持激活状态。
	SW_SHOWNORMAL:激活并显示窗口。如果窗口最大化或最小化,系统将其恢复到原来的尺寸和位置(与SW_RESTORE相同)。


2、返回值

	如果函数成功,当它接收到一个WM_QUIT消息时就中止,函数应该返回在该消息的wParam参数的退出值。如果函数在进入消息循环前退出,应该返回零。
*/

你可能感兴趣的:(其他)