Windows API 程式設計必備的資料型別定義與核心結構體速查表。
Win32 基本資料型別
| 型別 | 定義 | 備註 |
| CALLBACK | 回調函式慣例 | 取代 FAR PASCAL |
| HANDLE | 32 位無號整數 | 通用控制代碼 |
| HDC | 裝置內容控制代碼 | GDI 繪圖核心 |
| HWND | 32 位無號整數 | 視窗控制代碼 |
| LONG | 32 位有號整數 | |
| LPARAM | 訊息參數 lParam | 32 位 |
| LPCSTR | 常數字串指標 | 唯讀 |
| LPSTR | 32 位字串指標 | 可讀寫 |
| LPVOID | 通用指標 | 等同 void* |
| LRESULT | 視窗程序回傳值 | |
| NULL | 0 值 | 預設參數/空指標 |
| UINT | 無號整數 | 32 位 (NT 系列) |
| WCHAR | 16 位 Unicode 字元 | 通用字元集 |
| WINAPI | API 函式慣例 | 取代 FAR PASCAL |
| WPARAM | 訊息參數 wParam | 32 位 |
常見結構體
| 結構體 | 用途 |
| MSG | 訊息佇列項目 (hwnd, message, wParam, lParam, time, pt) |
| PAINTSTRUCT | 繪圖資訊 (hdc, fErase, rcPaint, fRestore, fIncUpdate, rgbReserved) |
| RECT | 矩形區域 (left, top, right, bottom) |
| WNDCLASS | 視窗類別註冊資訊 (style, lpfnWndProc, hInstance, hIcon, hCursor, hbrBackground, lpszMenuName, lpszClassName, ...) |
標準 WinMain 入口點範例
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
char szProgName[] = "ProgName";
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) {
HWND hWnd; MSG msg; WNDCLASS wc;
wc.lpszClassName = szProgName;
wc.hInstance = hInst;
wc.lpfnWndProc = WndProc;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = 0;
wc.lpszMenuName = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.cbClsExtra = 0; wc.cbWndExtra = 0;
if (!RegisterClass(&wc)) return 0;
hWnd = CreateWindow(szProgName, "範例視窗",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, 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 msg, WPARAM wParam, LPARAM lParam) {
HDC hdc; PAINTSTRUCT ps;
switch (msg) {
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// 繪圖範例:線、弦、餅圖、橢圓、矩形
MoveToEx(hdc, 0, 0, NULL); LineTo(hdc, 639, 429);
MoveToEx(hdc, 639, 0, NULL); LineTo(hdc, 0, 429);
TextOut(hdc, 120, 30, "一些線", 6);
Chord(hdc, 450, 20, 430, 80, 455, 25, 425, 70);
TextOut(hdc, 470, 30, "弧線", 4);
Pie(hdc, 350, 50, 400, 150, 300, 50, 300, 100);
TextOut(hdc, 350, 50, "餅圖", 4);
Ellipse(hdc, 100, 100, 400, 400);
Ellipse(hdc, 249, 249, 251, 251);
TextOut(hdc, 250, 250, "圓心", 4);
Rectangle(hdc, 50, 300, 150, 400);
ValidateRect(hWnd, NULL);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0); break;
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
WinMain 參數說明
- hInst:目前執行個體控制代碼,識別應用程式。
- hPrevInst:Win32 下永為 NULL (無前一實例)。
- lpCmdLine:命令列參數字串。
- nCmdShow:視窗初始顯示狀態 (SW_SHOW/SW_HIDE 等)。