1. 程式人生 > >MOOC清華《VC++面向物件與視覺化程式設計》第1章:空白視窗的建立(空專案)

MOOC清華《VC++面向物件與視覺化程式設計》第1章:空白視窗的建立(空專案)

#include <Windows.h> //包含應用程式中所需的資料型別和資料結構的定義
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //視窗函式說明

//---------------------  以下初始化視窗類  -----------------------

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
	HWND hwnd;
	MSG Msg;
	WNDCLASS wndclass;
	char lpszClassName[] = "視窗";     //視窗類名
	char lpszTitle[] = "My_Windows";   //視窗標題名
	
	//視窗類的定義
	wndclass.style = 0;                //視窗型別為預設型別
	wndclass.lpfnWndProc = WndProc;    //定義視窗處理函式
	wndclass.cbClsExtra = 0;           //視窗類無擴充套件
	wndclass.cbWndExtra = 0;           //視窗例項無擴充套件
	wndclass.hInstance = hInstance;    //當前例項控制代碼
	wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
	                                   //視窗的最小化圖示為預設圖示
	wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
	                                   //視窗採用箭頭游標
	wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	                                   //視窗背景為白色
	wndclass.lpszMenuName = NULL;      //視窗中無選單
	wndclass.lpszClassName = lpszClassName;
	                                   //視窗類名為“視窗”

	//---------------------  以下進行視窗類的註冊  ---------------------
	if(!RegisterClass(&wndclass))    //如果註冊失敗則發出警告
		{
			MessageBeep(0);
			return FALSE;
		}
	
	//---------------------  建立視窗  -----------------------
	hwnd = CreateWindow
		(
		lpszClassName,               //視窗類名
		lpszTitle,                   //視窗例項的標題名
		WS_OVERLAPPEDWINDOW,         //視窗的風格
		CW_USEDEFAULT,
		CW_USEDEFAULT,               //視窗左上角座標為預設值
		CW_USEDEFAULT,
		CW_USEDEFAULT,               //視窗的高和寬為預設值
		NULL,                        //此視窗無父視窗
		NULL,                        //此視窗無主選單
		hInstance,                   //建立此視窗的應用程式的當前控制代碼
		NULL                         //不使用該值
		);
		
	//-------------------  顯示視窗  -------------------
	ShowWindow(hwnd, nCmdShow);

	//-------------------  繪製使用者區  -------------------
	UpdateWindow(hwnd);

	//-------------------  訊息迴圈  --------------------
	while(GetMessage(&Msg,NULL,0,0))
		{
			TranslateMessage(&Msg);
			DispatchMessage(&Msg);
		}
	return Msg.wParam;       //訊息迴圈結束即程式終止時將資訊返回系統
}

//視窗函式
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
		case WM_DESTROY: 
			PostQuitMessage(0);
		default:             //預設時採用系統訊息預設處理函式
			return
				DefWindowProc(hwnd,message,wParam,lParam);
	}
	return (0);
}