www.gusucode.com > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序 > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序/code/C++例题程序/第7章/s7_2/Smain7_2.cpp

    //Download by http://www.NewXing.com
// 主文件smain7_2.cpp

// 包含标准头文件
#include "sstdafx7_2.h"

HWND g_hWnd = NULL;			// 用来保存窗口句柄的变量
HINSTANCE g_hInst = NULL;	// 用来保存应用程序实例的句柄变量 

// 消息处理函数,Windows系统规定每个消息处理函数的定义形式都相同
LRESULT CALLBACK WndProc(	
							HWND	hWnd,		// 窗口句柄
							UINT	nMessage,	// 所发出的消息
							WPARAM	wParam,		// 参数1
							LPARAM	lParam		// 参数2
						)
{
	switch(nMessage)
	{
		// 响应WM_LBUTTONDOWN消息
		case WM_LBUTTONDOWN:
			MessageBox(hWnd, "收到WM_LBUTTONDOWN消息!", "通知", MB_OK);
			break;
		// 响应WM_RBUTTONDOWN消息
		case WM_RBUTTONDOWN:
			MessageBox(hWnd, "收到WM_RBUTTONDOWN消息!", "通知", MB_OK);
			break;
		// 响应WM_CREATE消息
		case WM_CREATE:
			MessageBox(hWnd, "收到WM_CREATE消息!", "通知", MB_OK);
			break;
		// 响应WM_DESTROY消息
		case WM_DESTROY:
			MessageBox(hWnd, "收到WM_DESTROY消息!", "通知", MB_OK);
			PostQuitMessage(0);
			break;
		// 必须调用函数DefWindowProc( ),这是Windows系统所规定的
		default:
			return DefWindowProc(hWnd, nMessage, wParam, lParam);
	}
	return FALSE;
}

// 应程序入口函数(此程序第一个被执行)
int WINAPI WinMain(
						HINSTANCE	hInstance,		// 程序实例句柄
						HINSTANCE	hPrevInstance,	// 为保持与Win16兼容的句柄
						LPSTR		lpCmdLIne,		// 命令行参数
						int			nCmdShow		// 初始化窗口显示方式
				   )
{
	WNDCLASS	oWnd;							// 窗口类,可为WNDCLASS
	MSG			msgTmp;							// Windows消息
	HWND		hWnd;							// 窗口句柄
	g_hInst = hInstance;
	
	// 定义窗口信息,以便创建窗口
	oWnd.style			= CS_HREDRAW|CS_VREDRAW;	// 窗口类型
	oWnd.lpfnWndProc	= (WNDPROC)WndProc;			// 窗口处理函数为WndProc( )
	oWnd.cbClsExtra		= NULL;						// 窗口类无扩展
	oWnd.cbWndExtra		= NULL;						// 窗口实例无扩展
	oWnd.hInstance		= hInstance;				// 当前实例句柄
	oWnd.hIcon			= LoadIcon(NULL,IDI_APPLICATION);	// 窗口最小化图标为默认图标
	oWnd.hCursor		= LoadCursor(NULL,IDC_ARROW);		// 用箭头作为鼠标图标
	oWnd.hbrBackground	= (HBRUSH)GetStockObject(WHITE_BRUSH);	// 以白色作为窗口颜色
	oWnd.lpszMenuName	= NULL;						// 窗口无菜单
	oWnd.lpszClassName	= "第一个Windows程序";		// 窗口所属类名
	
	// 注册窗口类 
	if(!RegisterClass(&oWnd))						
	{	
		MessageBeep(0);								// 如注册失败则发出警告
		return FALSE;
	}
	
	// 创建窗口 
	g_hWnd = CreateWindow(
							"第一个Windows程序",	// 注册的窗口类名 
							"第一个Windows程序",	// 窗口标题名
							WS_OVERLAPPEDWINDOW,	// 窗口的风格
							CW_USEDEFAULT,			// 显示窗口的左上角的X坐标,取默认值 
							CW_USEDEFAULT,			// 显示窗口的左上角的Y坐标,取默认值
							CW_USEDEFAULT,			// 显示窗口的右下角的X坐标,取默认值
							CW_USEDEFAULT,			// 显示窗口的右下角的Y坐标,取默认值
							NULL,					// 此窗口无父窗口
							NULL,					// 菜单句柄(此处设为没有菜单句柄)
							hInstance,				// 程序实例句柄
							NULL					// 指向一个传递给窗口的指针型参数,此处设置为空
					  );
	if (g_hWnd == NULL)									
		return FALSE;								// 创建窗口失败,返回FALSE
	ShowWindow(g_hWnd, nCmdShow);					// 显示窗口
	UpdateWindow(g_hWnd);							// 更新窗口

	while (GetMessage(&msgTmp, NULL, 0, 0))			// 消息循环
	{
		TranslateMessage(&msgTmp);					// 翻译消息
		DispatchMessage(&msgTmp);					// 将消息传递给处理函数
	}
	
	return msgTmp.wParam;							// 返回消息的附加参数
}