Custom AppWizard 建立流程回顧
Ctrl+N → Custom AppWizard 專案
- 步驟 1:選擇基準類型
- Existing project:以現有專案為藍圖 (缺點:檔案/類名固定)
- Standard MFC AppWizard steps:最通用、彈性最大 (本文採用)
- Your own customized steps:完全自訂步驟 (適合非 MFC 專案)
- 步驟 2:命名精靈 (顯示在專案類型清單)、設定額外步驟數 (本例 0)、選擇 EXE/DLL、語言支援
範例:SDIAutomationWiz — 預設建立支援自動化的 SDI 專案
- 專案名:
SDIAutomationWiz
- 顯示名:自訂
- 額外步驟:0
- 類型:MFC AppWizard Executable
- 語言:中文
核心類別:CCustomAppWiz 衍生類
編譯後為 .awx (實為 DLL)。關鍵點:
// DLL 入口點
extern "C" int APIENTRY DllMain(HINSTANCE hInst, DWORD dwReason, LPVOID) {
if (dwReason == DLL_PROCESS_ATTACH) {
AfxInitExtensionModule(SDIAutomationWizDLL, hInst);
new CDynLinkLibrary(SDIAutomationWizDLL);
SetCustomAppWizClass(&SDIAutomationWizaw); // 向 MFCAPWZ.DLL 註冊
} else if (dwReason == DLL_PROCESS_DETACH) {
AfxTermExtensionModule(SDIAutomationWizDLL);
}
return 1;
}
MFCAPWZ.DLL 才是真正的控制者,自定義精靈只負責:顯示步驟順序、設定預設選項、修改專案模板設定。
五大可覆寫虛擬函式
| 函式 | 用途 |
InitCustomAppWiz() | 初始化:設定 Dictionary 巨集預設值 |
ExitCustomAppWiz() | 卸載時清理 |
Next() | 控制「下一步」按鈕啟用/下一步驟 ID |
Back() | 控制「上一步」 |
CustomizeProject() | 專案建立前修改 .mak 設定 (最後介入點) |
Dictionary 巨集操作實戰
m_Dictionary 為 CMapStringToString,鍵值皆為 CString。
// 在 InitCustomAppWiz() 末尾加入:
m_Dictionary.SetAt(_T("PROJTYPE_SDI"), _T("1")); // SDI
m_Dictionary.SetAt(_T("PROJTYPE_MDI"), _T("0")); // 非 MDI
m_Dictionary.SetAt(_T("AUTOMATION"), _T("1")); // 支援自動化
Build 後 .awx 自動部署,新建專案即可見預設選為 SDI+Automation。
發布部署
僅需複製 .awx 至 Visual Studio Template 目錄 (...\Microsoft Visual Studio\Common\MSDev98\Template)。
下一步預告
第三部分將實作完整企業級精靈:新增步驟對話框收集資訊 → 生成客製「關於」對話框 (含超連結/圖示) → 所有原始檔自動加入版權註釋 → 註冊表記憶輸入免重複填寫。
- 上一篇文章: Visual C++ 定制 AppWizard 進階實戰 (三):打造企業級專案模板,自動生成關於對話框與版權註釋
- 下一篇文章: Visual C++ 定制 AppWizard 基礎原理 (一):MFCAPWZ.DLL 架構、Dictionary 巨集與多軌跡機制
Copyright ©
程式碼之家 All Rights Reserved