DOS 程式:循序執行、直接操作硬體、單任務。
Windows 程式:事件驅動、共享硬體資源、多任務、GUI 介面。
句柄是 Windows 核心物件的不透明識別碼 (32/64 位整數),用於參考系統管理的資源。應用程式不可直接解讀句柄值,只能傳遞給 API。
| 類型 | 前綴 | 代表資源 | 典型來源 API |
|---|---|---|---|
| 視窗句柄 | HWND | 視窗、對話框、按鈕、編輯框等所有可視物件 | CreateWindow, FindWindow |
| 實例句柄 | HINSTANCE | 當前模組 (EXE/DLL) 在記憶體中的基址/身分 | WinMain 參數, GetModuleHandle |
| 游標句柄 | HCURSOR | 滑鼠游標資源 | LoadCursor, CreateCursor |
| 圖示句柄 | HICON | 圖示資源 | LoadIcon, CreateIcon |
| 筆刷句柄 | HBRUSH | 填充圖案/顏色 | CreateSolidBrush, GetStockObject |
| 畫筆句柄 | HPEN | 線條樣式/顏色/寬度 | CreatePen |
| 字體句柄 | HFONT | 字體屬性 (字型、大小、粗細) | CreateFont, CreateFontIndirect |
| 位圖句柄 | HBITMAP | 點陣圖像 | LoadBitmap, CreateCompatibleBitmap |
| 選單句柄 | HMENU | 選單結構 | CreateMenu, LoadMenu |
| 裝置環境 | HDC | 繪圖表面 (螢幕、印表機、記憶體 DC) | GetDC, BeginPaint, CreateCompatibleDC |
| 進程句柄 | HANDLE | 進程物件 | OpenProcess, CreateProcess |
| 執行緒句柄 | HANDLE | 執行緒物件 | CreateThread, OpenThread |
| 檔案句柄 | HANDLE | 檔案/管道/序列埠等 I/O 物件 | CreateFile, OpenFile |
GetMessage → TranslateMessage → DispatchMessage。DispatchMessage 將訊息送達目標視窗的視窗程序。WM_KEYDOWN / WM_CHAR / WM_KEYUP。WM_MOUSEMOVE。WM_LBUTTONDOWN / WM_LBUTTONUP / WM_CLICK (由系統合成)。WM_PAINT。WM_TIMER。
int WINAPI WinMain(
HINSTANCE hInstance, // 當前實例句柄
HINSTANCE hPrevInstance, // Win32 恆為 NULL (16 位相容)
LPSTR lpCmdLine, // 命令列參數字串
int nCmdShow // 視窗初始顯示狀態 (SW_SHOWDEFAULT 等)
)
hInstance:模組在進程空間的基址,也是資源載入的鍵值。hInstance (ASLR 下更明顯)。
#include
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int nShow)
{
MessageBox(NULL, TEXT("Hello Windows API!"), TEXT("First API"), MB_OK);
return 0;
}
CreateWindow, RegisterClass, GetMessage, DispatchMessage, DefWindowProc 五大核心 API。
理解句柄與事件驅動,是跨越 DOS 思維、進入 Windows 系統程式設計大門的鑰匙。