視窗程式的框架

陈若麟發表於2024-05-04
#include <windows.h>
//步驟
//1.建立WinMain()主函式
//2.設計視窗
//3.註冊視窗 
//4.建立視窗
//5.顯示視窗 
//回撥函式,訊息處理函式 
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);
	}
	return 0;
}
//1.建立WinMain()主函式
//WINMAPI 函式修飾符 被稱為棧的資料結構 用來支援引數傳遞 
int WINAPI WinMain(HINSTANCE hInstance,//該程式當前執行例項的控制代碼 
					HINSTANCE hPrevInstance,//當前例項的前一個例項的控制代碼 
					LPSTR lpCmdLine,//是一個以空終止的字串, 指定傳遞給應用程式的命令性引數 
					int nCmdShow//指定程式的視窗應如何顯示 
					) {
	//2.設計視窗 
	WNDCLASSEX wc;//視窗屬性 
	memset(&wc,0,sizeof(wc));//初始化結構體 
	wc.cbSize		 = sizeof(WNDCLASSEX);//賦值結構體大小 
	wc.lpfnWndProc	 = WndProc;//視窗處理函式的指標,用來傳送資訊,回撥函式 
	wc.hInstance	 = hInstance;//例項控制代碼 
	wc.hCursor		 = LoadCursor(NULL, IDC_ARROW);//視窗類的滑鼠樣式,為滑鼠樣式資源的控制代碼 
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//視窗類的背景刷,為背景刷控制代碼 
	wc.lpszClassName = "WindowClass";//指向視窗類的指標 
//	wc.hIcon		 = LoadIcon(NULL, IDI_APPLICATION);
//	wc.hIconSm		 = LoadIcon(NULL, IDI_APPLICATION);
/*	if(!RegisterClassEx(&wc)) {
		MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
		return 0;
	}*/
	//3.註冊視窗 
	RegisterClassEx(&wc);
	//4.建立視窗
	//建立成功後返回值為視窗控制代碼型別 
	HWND hwnd;//控制代碼,或指向視窗的指標 
	hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,//視窗的擴充套件風格 
		"WindowClass",//指定視窗類的名稱,設計視窗類中為lpszClassName成員指定的名稱 
		"Caption",//指定視窗類的名字,視窗樣式指定了標題欄,視窗名字將顯示在標題欄上 
		WS_VISIBLE|WS_OVERLAPPEDWINDOW,//視窗的基本風格 
		CW_USEDEFAULT,//x
		CW_USEDEFAULT,//y
		500,//寬 
		500,//高 
		NULL,//視窗的父視窗控制代碼 
		NULL,//視窗的選單控制代碼 
		hInstance,//應用程式例項控制代碼 
		NULL);//視窗建立時附加引數 
	//5.顯示視窗 
	MSG msg;//所有訊息的臨時位置 
//	if(hwnd == NULL) {
//		MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
//		return 0;
//	}
	while(GetMessage(&msg, NULL, 0, 0) > 0) {//如果沒有接受到錯誤資訊,執行下面函式語句 
		TranslateMessage(&msg);//訊息轉化 
		DispatchMessage(&msg);//訊息派遣 把TranslateMessage轉換的訊息傳送到視窗的訊息處理函式 
		//此函式在視窗註冊是已經指定 
	}
	return msg.wParam;//指定應用程式退出 
}

  

相關文章