深入浅出MFC(1)

定制一个AppWizard
   Developer's Studio 提供了一个开放的AppWizard接口。现在,我们可以轻易的扩充AppWizard:从小的规模的扩充,到几乎改头换面成为一种全新类型的程序代码产生器。
   利用Developer's Studio和AppWizard之间的接口凭借一组类和一些组件表现出来,使我们可以定制合乎自己要求的AppWizard。制造出来的所谓Custom AppWizard(注:一个扩展名为。AWX的动态链接函数库),他必须放在驱动器目录中(C:/Program Files/Microsoft Visual Studio/Common/MSDev98/Template)才会发挥作用。
什么是Wizard?
   所谓Wizard就是一个扩展名为。AWX的动态链接库。Visual C++的"project manager"会检查集成开发环境中的Template子目录(C:/Program Files/Microsoft Visual Studio/Common/MSDev98/Template),然后显示其图标于[New Project]对话框中,供使用者使用。
   Wizard本身就是一个所谓的"template直译器"。这里所谓的"template"是一些文字文件,内有许多特殊符号(macros和directives)。Wizard读取这些template,对于正常文字,就已正常的output stream输出到另一个文件中;对于特殊字符或保留字,就解析他们,然后再把结果以一般的output stream输出到文件中。Wizard所显示给使用者看的"步骤对话框"可以接受使用者的指定项目或文字输出,于是会影响template中的特殊字符号的内容或解析,连带也就影响了Wizard的Stream输出,这些Stream输出,最后就成为你项目的原文件。
  下面是个实例操作指定一个AppWizard:
  Developers Studio提供了一个让我们制作Custom AppWizard的Wizard,即Custom AppWizard。
  工程名:Top Studio
  三种可能的扩充形式:
  1。An existing project:根据一个原已存在的项目文件(*。dsp)来产生一个Custom AppWizard。
  2。Standard MFC AppWizard steps:根据某个原有的AppWizard,为它加上额外的几个步骤,成为一个新的custom AppWizard。这是为被接受的一种方式。
  3。Your own custom steps:有全新的步骤和全新的对话框画面。这当然是最大弹性的展现了,并同时也是最困难的一种做法,因为你要自行负责所有的工作。
  这个实例是以原本的MFC AppWizard(EXE)为基础(有六个步骤),在加上一个步骤,让程序员填入姓名,简易说明,然后Top Studio AppWizard能够把这些数据加到每一个程序文件的最前端。
  接下来[next],选择是制造出MFC EXE还是MFC DLL,和使用的文字(这里选择英文)
  [finish],OK.一个框架就出来了。可以运行一下,在新建一个工程(MFC EXE),看看Project中多了一个Top Studio AppWizard。
  一直点击[next],就会发现多了一个第七步骤,此时还什么操作也没有,因为对程序也没有任何操作吗。
  现在开始动手修改Top Studio AppWizard
  添加两个Edit后,名称分别为m_szAuthor,m_szComment(和在对话框工程中添加是一样的)
  // This is called whenever the user presses Next, Back, or Finish with this step
//  present.  Do all validation & data exchange from the dialog in this function.
BOOL CCustom1Dlg::OnDismiss()
{
 if (!UpdateData(TRUE))
  return FALSE;

 // TODO: Set template variables based on the dialog's data.
 if( m_szAuthor.IsEmpty() == FALSE )
  TopStudioaw.m_Dictionary["PROJ_AUTHOR"] = m_szAuthor;
 else
  TopStudioaw.m_Dictionary["PROJ_AUTHOR"] = "";
 if( m_szComment.IsEmpty() == FALSE )
  TopStudioaw.m_Dictionary["PROJ_COMMENT"] = m_szComment;
 else
  TopStudioaw.m_Dictionary["PROJ_COMMENT"] = "";

 CTime date = CTime::GetCurrentTime();
 CString szDate = date.Format("%A, %B %d, %Y");
 TopStudioaw.m_Dictionary["PROJ_DATE"] = szDate;

 return TRUE; // return FALSE if the dialog shouldn't be dismissed
}

接下来就是要修改text template
    现在,为Top Studio AppWizard的template子目录中的每一个。H文件和。CPP文件增加一小段代码,放在文件的最前端:
/*
  This project was created using the Top Studio AppWizard

  $$PROJ_COMMENT$$

  Project: $$Root$$
  Author : $$PROJ_AUTHOR$$
  Date   : $$PROJ_DATE$$
*/
部分说明:$$Root$$就是一个macros,意义是应用程序的项目名称(可以引大小写),还有一些Develper Studio系统内建的一组标准的macros,供AppWizard所产生的每一个项目使用(可以参考《深入浅出MFC》P579)。
 好了,现在可以在用这个新建的AppWizard创建一个新的MFC EXE工程,你会发现在每个文间的开始都有一段文字说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值