你的第一個Windows程序

MSDN在線原文(英文)

你的第一個Windows程序

在這個模塊,我們編寫一個最小的Windows程序。它的作用是創建並顯示一個空白窗口。這第一個程序包含大約50行代碼,不計算空白行和註釋。這將是我們的起點;以後還會添加圖形,文本,用戶輸入和其它功能。

 

示例程序屏幕截圖

下面是完整的程序代碼:

#ifndef UNICODE
#define UNICODE
#endif

#include <windows.h>

LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg, WPARAM wParam,LPARAM lParam);

int wWinMain(HINSTANCE hInstance,HINSTANCE,PWSTR pCmdLine,int nCmdShow)
{
	//註冊窗口類
	const wchar_t CLASS_NAME[]=L"Sample Window Class";

	WNDCLASS wc = {};
	
	wc.lpfnWndProc		=WindowProc;
	wc.hInstance		=hInstance;
	wc.lpszClassName	=CLASS_NAME;

	RegisterClass(&wc);

	//創建窗口
	HWND hwnd = CreateWindowEx(
		0,								//可選窗口樣式
		CLASS_NAME,						//窗口類
		L"Learn to Program Windows",	//窗口文本
		WS_OVERLAPPEDWINDOW,			//窗口樣式
		//窗口大小和定位
		CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
		NULL,							//父窗口
		NULL,							//菜單
		hInstance,						//實例句柄
		NULL							//其它應用程序的數據
		);
	
	if(hwnd == NULL)
	{
		return 0;
	}
	ShowWindow(hwnd,nCmdShow);

	//運行消息循環
	MSG msg = {};
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return 0;

}

LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg, WPARAM wParam,LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
		
	case WM_PAINT:
		PAINTSTRUCT ps;
		HDC hdc = BeginPaint(hwnd,&ps);
		FillRect(hdc,&ps.rcPaint,(HBRUSH)(COLOR_WINDOW+1));
		EndPaint(hwnd,&ps);
		return 0;
	}
	return DefWindowProc(hwnd,uMsg,wParam,lParam);
}


你可以從Windows Hello World Sample下載完整的Visual Studio項目。

它會給出一個有幫助的簡要概述,說明這段代碼是做什麼的。隨後的主題將詳細的分析代碼。

  1. wWinMain是程序的入口點,當程序啓動,他註冊應用程序窗口某些行爲的信息。其中最重要的信息是一個函數的地址,在這個例子中是WindowProc,這個函數定義窗口的行爲——它的外觀,如何與用戶交互等等。
  2.  下一步,程序創建窗口和接收這個窗口唯一標識的句柄。
  3. 如果這個窗口順利地創建,程序進入while循環,程序保持循環,直到程序關閉窗口並退出應用程序。

請注意程序沒有顯式地調用WindowProc函數,儘管我們說這是大多數應用程序邏輯的定義。Windows通過一系列的消息與程序通信,While循環內的代碼驅動過程。每次程序調用 DispatchMessage 函數,每個消息間接的使Windows調用WindowProc函數。

詳細的代碼分析後續......

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章