CreateWindowExW 是 Windows 編程創建擴展風格窗口的核心函數。以下是關鍵參數的中文對照表與實戰要點:
函數原型
HWND CreateWindowExW(
DWORD dwExStyle, // 擴展窗口風格
LPCWSTR lpClassName, // 窗口類名
LPCWSTR lpWindowName, // 窗口標題
DWORD dwStyle, // 窗口風格
int x, int y, // 位置
int nWidth, int nHeight, // 尺寸
HWND hWndParent, // 父窗口句柄
HMENU hMenu, // 菜單/子窗口 ID
HINSTANCE hInstance, // 實例句柄
LPVOID lpParam // 創建數據指針
);
常用擴展風格 (dwExStyle)
| 常量 | 含義 |
| WS_EX_CLIENTEDGE | 凹邊框(輸入框常用) |
| WS_EX_OVERLAPPEDWINDOW | 標準重疊窗口(含邊框、標題欄) |
| WS_EX_TOPMOST | 置頂窗口 |
| WS_EX_TOOLWINDOW | 工具窗口(不顯示在任務欄) |
常用窗口風格 (dwStyle)
| 常量 | 含義 |
| WS_OVERLAPPEDWINDOW | 標準應用窗口(含最小/最大/關閉按鈕) |
| WS_VISIBLE | 創建即顯示 |
| WS_CHILD | 子窗口 |
| WS_POPUP | 彈出式窗口 |
實戰避坑指南
- 類名必須已註冊:
lpClassName 需與 RegisterClassEx 註冊的一致。
- Unicode 字串:_W 後綴要求寬字符,字串常量加
L"" 或用 TEXT() 宏。
- CW_USEDEFAULT:讓系統自動決定位置/大小,僅適用於重疊窗口。
- 返回值檢查:失敗返回
NULL,調用 GetLastError() 獲取錯誤碼。
最小化示例
WNDCLASSW wc = {0};
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.lpszClassName = L"MyWindowClass";
RegisterClassW(&wc);
HWND hwnd = CreateWindowExW(
0, L"MyWindowClass", L"標題",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, 640, 480,
NULL, NULL, hInstance, NULL);