按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
利用资源编辑器修改IDD_CUSTOM1 对话窗画面
请参考第4章和第10 章,修改IDD_CUSTOM1 对话窗画面如下:
两个edit 控制组件的ID 如图15…4 所示。
利用ClassWizard 修改IDD_CUSTOM1 对话窗的对应类别CCustom1Dlg
图15…4 列出每一个控制组件的类型、识别码及其对应的变量名称等资料。变量将做为
DDX 所用。修改动作如图15…5。
785
…………………………………………………………Page 848……………………………………………………………
第篇 深入 MFC 程式設計
control ID 名称 种类 变量类型
IDC_EDIT_AUTHOR m_szAuthor Value CString
IDC_EDIT_MENT m_szment Value CString
图15…4 IDD_CUSTOM1 对话窗控制组件的类型、ID、对应的变量名称
图15…5 利用ClassWizard 为IDD_CUSTOM1 对话窗的两个edit 控制
组件加上两个对应的变量m_szAuthor 和m_szment, 以为
DDX 所用。
Custom AppWizard 为我们做出来的这个CCustom1Dlg 必定衍生自CAppWizStepDlg。
你不会在MFC 类别架构档中发现CAppWizStepDlg,它是Visual C++ 的mfcapwz。dll
所提供的一个类别。此类别有一个虚拟函数OnDismiss,当AppWizard 的使用者选按
【Back 】或【Next 】或【Finish 】钮时就会被唤起。如果它传回TRUE,AppWizard 就可
786
…………………………………………………………Page 849……………………………………………………………
15 AppWizard
第 章 定製個
以切换对话窗;如果传回的是FALSE ,就不能。我们可以在这个函数中做数值检验的工
作,更重要的是做macros 的设定工作。
改写OnDismiss 虚拟函数,在其中定义macros
前面我已经说过,macros 的定义储存在一个Map 结构中。它在哪里?
整个Top Studio AppWizard (以及其它所有的custom AppWizard )的主类别系衍生自系
统提供的CCustomAppWiz :
// in Top StudioAw。h
class CTopStudioAppWiz : public CCustomAppWiz
{
。。。。
};
// in 〃Top StudioAw。cpp〃
CTopStudioAppWiz TopStudioaw; //类似application object。
//对象命名规则是〃项目名称〃 + 〃aw〃。
你不会在MFC 类别架构档中发现CCustomAppWiz ,它是Visual C++ 的mfcapwz。dll
所提供的一个类别。此类别拥有一个CMapStringToString 对象,名为m_Dictionary,所
以TopStudioaw 自然就继承了m_Dictionary。这便是储存macros 定义的地方。我们可
以利用TopStudioaw。m_Dictionary'xxx' = xxx 的方式来加入一个个的macros 。
现在,改写OnDismiss 虚拟函数如下:
#0001 // This is called whenever the user presses Next; Back; or Finish with this step
#0002 // present。 Do all validation & data exchange from the dialog in this function。
#0003 BOOL CCustom1Dlg::OnDismiss()
#0004 {
#0005 if (!UpdateData(TRUE))
#0006 return FALSE;
#0007
#0008 if( m_szAuthor。IsEmpty() == FALSE )
#0009 TopStudioaw。m_Dictionary'〃PROJ_AUTHOR〃' = m_szAuthor;
#0010 else
787
…………………………………………………………Page 850……………………………………………………………
第篇 深入 MFC 程式設計
#0011 TopStudioaw。m_Dictionary'〃PROJ_AUTHOR〃' = 〃〃;
#0012
#0013 if( m_szment。IsEmpty() == FALSE )
#0014 TopStudioaw。m_Dictionary'〃PROJ_MENT〃' = m_szment;
#0015 else
#0016 TopStudioaw。m_Dictionary'〃PROJ_MENT〃' = 〃〃;
#0017
#0018 CTime date = CTime::GetCurrentTime();
#0019 CString szDate = date。Format( 〃%A; %B %d; %Y〃 );
#0020 TopStudioaw。m_Dictionary'〃PROJ_DATE〃' = szDate;
#0021
#0022 return TRUE; // return FALSE if the dialog shouldn't be dismissed
#0023 }
这么一来我们就定义了三个macros :
macro 名称 macro 内容
PROJ_AUTHOR m_szAuthor
PROJ_DATE szDate
PROJ_MENT m_szment
修改 text template
现在,为Top Studio AppWizard 的template 子目录中的每一个。H 档和。CPP 档增加
一小段码,放在文件最前端:
/*
This project was created using the Top Studio AppWizard
PROJ_MENT
Project: Root
Author : PROJ_AUTHOR
Date : PROJ_DATE
*/
788
…………………………………………………………Page 851……………………………………………………………
15 AppWizard
第 章 定製個
Top Studio AppWizard执行结果
重新编译联结,然后使用Top Studio AppWizard 产生一个项目。第7个步骤的画面如下:
由Top Studio AppWizard 产生出来的程序代码中,每一个。CPP 和。H 档最前面果然有
下面数行文字,大功告成。
789
…………………………………………………………Page 852……………………………………………………………
第篇 深入 MFC 程式設計
更多的信息
我在本章中只是简单示范了一下「继承自原有之Wizard ,再添加新功能」的作法。这该
算是半自助吧。全自助的作法就复杂许多。Walter Oney 有一篇〃Pay No Atten