首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

Visual C++ 定制 AppWizard 基礎原理 (一):MFCAPWZ.DLL 架構、Dictionary 巨集與多軌跡機制

     編輯:關於VC++

AppWizard 簡介

AppWizard (應用程式精靈) 是 Visual Studio 核心工具,透過一系列對話框引導開發者設定專案選項,自動產生專案框架 (專案檔、工作區、原始碼、資源等)。內建精靈無法擴充,Custom AppWizard (VC 4.0+) 解決此限制。

Custom AppWizard 適用場景

  • 批量建立相似專案 (如皆為 SDI+Automation),預設選項提升效率
  • 注入企業標準:統一「關於」對話框、版權註釋、命名規範
  • 自訂步驟對話框收集專案專屬資訊

運作核心:MFCAPWZ.DLL

  • 所有精靈 (內建/自訂) 均在 Visual Studio 進程內由 MFCAPWZ.DLL 統一調度
  • 自訂精靈編譯為 .awx (DLL),置於 ...\Template 目錄,自動出現在「新建專案」清單

CCustomAppWiz 基類與 Dictionary 字典

  • CCustomAppWiz 為 MFCAPWZ.DLL 與自訂精靈的通訊介面,需衍生並覆寫虛擬函式
  • Dictionary (m_Dictionary, CMapStringToString) 存放 **巨集名稱 → 值** 映射
  • 範例:PROJTYPE_SDI=1 表示 SDI 專案

// 讀取巨集
CString val;
m_Dictionary.Lookup("PROJTYPE_SDI", val);
if (val == "1") { /* SDI */ }

// 設定巨集
m_Dictionary.SetAt("HELP", "1");

MFCAPWZ.DLL 提供 60+ 內建巨集,自訂巨集可用 SetAt 加入。

模板佔位符替換機制

  • 每個精靈擁有一組模板檔 (原始碼、資源、專案檔等)
  • 模板中 $$MACRO$$ 為佔位符,MFCAPWZ.DLL 掃描並以 Dictionary 對應值替換
  • 範例:CAPTION "關於 $$ROOT$$" → CAPTION "關於 MyTestDlgApp"

實驗驗證

  1. 用 AppWizard 建立對話框專案 MyTestDlgApp
  2. 以文字編輯器開啟 MyTestDlgApp.rc
  3. 搜尋 IDD_ABOUT,發現 $$ROOT$$ 已被專案名取代

巨集控制模板選擇與軌跡

  • 巨集值決定使用哪組模板:PROJTYPE_SDI=1 用 SDI 模板,PROJTYPE_DLG=1 用對話框模板
  • 多軌跡精靈:步驟總數動態隨專案類型改變
    • MDI → 6 步驟
    • 對話框 → 4 步驟

實驗:觀察步驟數變化

  1. Ctrl+N → MFC AppWizard (exe)
  2. 標題顯示「Step 1」,總步驟未知
  3. 選 MDI → Next → 標題「Step 2 of 6」
  4. Back → 選對話框 → Next → 標題「Step 2 of 4」

下一步

第二部分將動手建立最簡單的 Custom AppWizard:SDIAutomationWiz,預設產生支援自動化的 SDI 專案,實作 InitCustomAppWiz 設定巨集。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved