Windows 程式設計常讓初學者感到困惑,尤其是 SDK(Software Development Kit)與 MFC(Microsoft Foundation Classes)的關係。本文將以淺顯易懂的方式,帶您掌握 Windows 程式架構的核心概念,適合剛入門的開發者閱讀。
Windows 程式設計的基礎在於呼叫 Windows API。SDK 方式直接呼叫這些 C 風格的 API 函數,而 MFC 則將 API 封裝成 C++ 類別,提供物件導向的開發介面。簡單來說:
CWnd、CDialog),簡化開發流程,但需具備 C++ 物件導向基礎。下圖說明兩者呼叫關係:

Windows 程式本質上是「事件驅動」的。使用者操作(滑鼠移動、鍵盤輸入)會產生訊息(如 WM_MOUSEMOVE、WM_KEYDOWN),系統將訊息放入佇列,程式透過訊息迴圈取出並分派給對應的視窗程序處理。
一個基本的 SDK 程式只需實作兩個核心函數:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// 1. 註冊視窗類別
WNDCLASS wc = {0};
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.lpszClassName = TEXT("MyWindowClass");
RegisterClass(&wc);
// 2. 建立視窗
HWND hWnd = CreateWindow(TEXT("MyWindowClass"), TEXT("標題"), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL);
// 3. 顯示與更新視窗
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
// 4. 訊息迴圈
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
case WM_MOUSEMOVE:
// 處理滑鼠移動
break;
case WM_KEYDOWN:
// 處理按鍵按下
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
理解上述架構後,建議:
掌握 SDK 基礎後,再學習 MFC 將更得心應手。Windows 程式設計的學習曲線雖陡峭,但只要理清「訊息驅動」這條主線,一切皆有迹可循。