核心資料型別
| 型別 | 描述 |
CALLBACK | 回呼函式慣用修飾詞,取代 FAR PASCAL |
HANDLE | 32 位元無號整數,通用控制碼 |
HDC | 裝置內容控制碼 |
HWND | 視窗控制碼 |
LONG | 32 位元有號整數 |
LPARAM | 訊息 lParam 參數型別 |
LPCSTR | 常數字串指標 |
LPSTR | 字串指標 |
LPVOID | 通用指標 (void*) |
LRESULT | 視窗程序回傳值 |
NULL | 空指標/零值 |
UINT | 無號整數(32 位元) |
WCHAR | 16 位元 Unicode 字元 |
WINAPI | API 呼叫慣例,取代 FAR PASCAL |
WPARAM | 訊息 wParam 參數型別 |
常用結構體
| 結構體 | 用途 |
MSG | 訊息結構,含 hwnd, message, wParam, lParam, time, pt |
PAINTSTRUCT | BeginPaint 填充,含 hdc, rcPaint 等繪圖資訊 |
RECT | 矩形座標 left, top, right, bottom |
WNDCLASS | 視窗類別註冊資訊 |
最小可執行 Win32 範例
#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 lpMsg;
WNDCLASS wcApp = { 0 };
wcApp.lpszClassName = szProgName;
wcApp.hInstance = hInst;
wcApp.lpfnWndProc = WndProc;
wcApp.hCursor = LoadCursor(NULL, IDC_ARROW);
wcApp.hbrBackground = GetStockObject(WHITE_BRUSH);
wcApp.style = CS_HREDRAW | CS_VREDRAW;
if (!RegisterClass(&wcApp)) 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(&lpMsg, NULL, 0, 0))
{
TranslateMessage(&lpMsg);
DispatchMessage(&lpMsg);
}
return (int)lpMsg.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);
// 繪製幾何圖形、文字...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
參數說明備註
hInst:應用程式實例控制碼,識別進程。
hPrevInst:Win32 下永遠為 NULL。
lpCmdLine:命令列參數字串。
nCmdShow:視窗初始顯示狀態(SW_SHOW 等)。
此表可作為 Windows SDK 開發快速參考。