輸入專案共用資訊(作者、網站、說明、註釋),自動:
$$MACRO$$) 綁定newproj.inf、confirm.inf、資源模板 (dlgloc_chs.rc, loc_chs.rc)、Dlgres.h/resource.hAbout.h, StatLink.h/cpp, HyprLink.hCRegistry 封裝)VckbaseWiz


| 控制項 | ID | 變數 |
|---|---|---|
| 程式設計師 | IDC_EDT_PROGRAMMER | m_strProgrammer |
| Web 站點 | IDC_EDT_WEB_PAGE | m_strWebPage |
| 程式介紹 | IDC_EDT_GENERAL_INFO | m_strGeneralInfo |
| 代碼註釋 | IDC_EDT_COMMENT_INFO | m_strCommentInfo |
「程式介紹」「代碼註釋」設為 Multiline。
// OnInitDialog: 從 Dictionary 讀取
VckbaseWizaw.m_Dictionary.Lookup("PROGRAMMER", m_strProgrammer);
VckbaseWizaw.m_Dictionary.Lookup("WEB_PAGE", m_strWebPage);
VckbaseWizaw.m_Dictionary.Lookup("GENERAL_INFO", m_strGeneralInfo);
VckbaseWizaw.m_Dictionary.Lookup("COMMENT_INFO", m_strCommentInfo);
UpdateData(FALSE);
// OnDismiss: 寫回 Dictionary + 產生日期巨集
VckbaseWizaw.m_Dictionary.SetAt("PROGRAMMER", m_strProgrammer);
VckbaseWizaw.m_Dictionary.SetAt("WEB_PAGE", m_strWebPage);
VckbaseWizaw.m_Dictionary.SetAt("GENERAL_INFO", m_strGeneralInfo);
VckbaseWizaw.m_Dictionary.SetAt("COMMENT_INFO", m_strCommentInfo);
CTime t = CTime::GetCurrentTime();
VckbaseWizaw.m_Dictionary["DATE_INFO"] = t.Format("%A, %B %d, %Y");
return TRUE;
放入 Template/ 目錄,含 CAboutDlg 完整定義與超連結初始化 (Paul Dilascia 的 CStaticLink)。
// 於 Template 清單區加入
ABOUT.H TEMPLATE DISCARDABLE "template\about.h"
VCKBASELOGO.BMP TEMPLATE DISCARDABLE "template\vckbaselogo.bmp"
HYPRLINK.H TEMPLATE DISCARDABLE "template\HyprLink.h"
STATLINK.H TEMPLATE DISCARDABLE "template\StatLink.h"
STATLINK.CPP TEMPLATE DISCARDABLE "template\StatLink.cpp"
// 複製邏輯:三種專案類型皆複製 (若對話框型勾選 About)
$$IF(PROJTYPE_DLG)
$$IF(ABOUT)
about.h about.h
HYPRLINK.H HyprLink.h
STATLINK.CPP StatLink.cpp
STATLINK.H StatLink.h
$$ENDIF
$$ELIF(PROJTYPE_MDI)
... (同上)
$$ELIF(PROJTYPE_SDI)
... (同上)
$$ENDIF
// 資源檔
=:root.ico res\APP.ico
=:VCKBASELOGO.BMP res\VCKBASELOGO.BMP
$$IF(PROJTYPE_DLG)
$$IF(ABOUT)
#define IDC_STATIC_ICON 1000
#define IDC_STATIC_TEXT 1001
#define IDC_STATIC_MAIL 1002
#define IDB_STATIC_IMG 129
$$ENDIF
$$ELIF(PROJTYPE_MDI) ... $$ELIF(PROJTYPE_SDI) ...
$$ENDIF
#define _APS_NEXT_RESOURCE_VALUE 130
#define _APS_NEXT_CONTROL_VALUE 1003
$$IF(ABOUT)
IDD_ABOUTBOX DIALOG DISCARDABLE 34, 22, 313, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "關於 $$ROOT$$"
FONT 9, "宋體"
BEGIN
ICON IDR_MAINFRAME, IDC_STATIC_ICON, 11,10,21,21
LTEXT "$$GENERAL_INFO$$", IDC_STATIC, 46,14,237,45
CONTROL 129, IDB_STATIC_IMG, "Static", SS_BITMAP|WS_BORDER, 46,72,110,36
LTEXT "@@VCKBASE 版權所有 (C) $$YEAR$$@@", IDC_STATIC, 187,83,106,8
LTEXT "VC 知識庫\n$$WEB_PAGE$$", IDC_STATIC_TEXT, 187,97,73,16
DEFPUSHBUTTON "@@確定@@", IDOK, 56,117,84,14,WS_GROUP
LTEXT "@@與我們聯系@@", IDC_STATIC_MAIL, 187,119,58,8
END
$$ENDIF
$$IF(ABOUT)
PUSHBUTTON "@@關於(&A)@@", ID_APP_ABOUT, 260,45,50,14
$$ENDIF
/////////////////////////////////////////////////////////////////////////////
// Project: $$ROOT$$
// Author: $$PROGRAMMER$$
// Date: $$DATE_INFO$$
// Description: $$COMMENT_INFO$$
/////////////////////////////////////////////////////////////////////////////
root.cpp:刪除舊 CAboutDlg,OnAppAbout 呼叫 CAboutDlg().DoModal(),#include "about.h"dialog.h/cpp:加入 OnAbout、訊息映射 ON_BN_CLICKED(ID_APP_ABOUT, OnAbout)、#include "about.h"
$$IF(PROJTYPE_DLG)
$$IF(ABOUT)
定制對話框信息:
作者:$$PROGRAMMER$$
網站:$$WEB_PAGE$$
程序說明:$$GENERAL_INFO$$
程序註釋:$$COMMENT_INFO$$
$$ENDIF
... (MDI/SDI 同理)
#include "registry.h"
#define VCKBASEWIZ_KEY "Software\\VCKBASE\\VckbaseWiz"
static struct { char szMacro[50], szRegVal[50], szDef[1024]; } pairs[] = {
{"PROGRAMMER","Programmer","程序員"},
{"WEB_PAGE","Web Page","網站"},
{"GENERAL_INFO","General Info","程序描述"},
{"COMMENT_INFO","Comment Info","程序註釋"}
};
// InitCustomAppWiz 尾部
CRegistry reg(HKEY_LOCAL_MACHINE, VCKBASEWIZ_KEY);
CString val;
for (int i=0; i<_countof(pairs); i++) {
if (reg.ReadString(pairs[i].szRegVal, val.GetBuffer(val.GetLength())))
m_Dictionary.SetAt(pairs[i].szMacro, val);
else {
m_Dictionary.SetAt(pairs[i].szMacro, pairs[i].szDef);
if (m_Dictionary.Lookup(pairs[i].szMacro, val))
reg.WriteString(pairs[i].szRegVal, val.GetBuffer(val.GetLength()));
}
}
// ExitCustomAppWiz 尾部
CRegistry reg2(HKEY_LOCAL_MACHINE, VCKBASEWIZ_KEY);
for (int i=0; i<_countof(pairs); i++)
if (m_Dictionary.Lookup(pairs[i].szMacro, val))
reg2.WriteString(pairs[i].szRegVal, val.GetBuffer(val.GetLength()));
VckbaseWiz.awx 自動複製到 VS Template 目錄

完整源碼下載:
AppWizard 專案 | 生成範例專案