Windows XP 引入 ComCtl32.dll 6.0 提供新視覺樣式 (圓角按鈕、藍色選取、主題感知)。應用程式需透過 Manifest 聲明相依性,系統載入器才會載入 v6 版而非舊版 v5。
24 (對應 RT_MANIFEST)1 (系統預設查找 ID 1)
Your Application Description
// Win32 SDK 專案需顯式包含並連結
#include
#pragma comment(lib, "comctl32.lib")
// 初始化通用控制項 (Win32 SDK 專案)
INITCOMMONCONTROLSEX icc = { sizeof(icc), ICC_STANDARD_CLASSES };
InitCommonControlsEx(&icc);
// MFC 專案無需上述代碼,AfxWinInit 內部已處理
輸出的 EXE 將內嵌 Manifest,在 XP 上自動呈現視覺樣式。
mt.exe -inputresource:YourApp.exe;#1 -out:manifest.xml 匯出驗證| 現象 | 原因 | 解決 |
|---|---|---|
| 仍為經典灰色風格 | Manifest 未正確嵌入 / ID 不為 1 / XML 格式錯誤 | 用 mt.exe 驗證;資源編輯器確認 Type=24, ID=1 |
| 部分控制項無樣式 | 未呼叫 InitCommonControlsEx / 旗標不足 | MFC 通常無需處理;SDK 專案加上 ICC_STANDARD_CLASSES | ICC_PROGRESS_CLASS 等 |
| 部署到 Win2000 崩潰 | Manifest 要求 Common Controls 6.0,Win2000 無此版本 | 在 Manifest 加入 <compatibility> 區塊或提供無 Manifest 版本 |
| 高 DPI 模糊 | 未宣告 DPI 感知 | Manifest 加入 <dpiAware>true</dpiAware> (Vista+) |
YourApp.exe.manifest 放在 EXE 同目錄三分鐘嵌入 Manifest,讓您的 VC6.0 經典專案在 Windows XP/2003/Vista/7/10/11 上都擁有原生視覺風格,零代碼修改業務邏輯。