在Visual C++中定制AppWizard (二)
2010-07-25 20:46:43 来源:WEB开发网——定义CCustomAppWiz 类
虽然编译后的Custom AppWizard文件扩展名都是.awx,但是它实际上就是一个通常我们使用的Windows动态链接库(DLl )文件。如果你打开SDIAutomationWiz.cpp文件,你就会看到如下的DLLMain()函数代码:
// Defining the DLLMain() Function
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason,
LPVOID lpReserved)
{
if (dwReason == DLl _PROCESS_ATTACH)
{
TRACE0("SDIAUTOMATIONWIZ.AWX Initializing!
");
// Extension DLl one-time initialization
AfxInitExtensionModule(SDIAutomationWizDLl , hInstance);
// Insert this DLl into the resource chain
new CDynLinkLibrary(SDIAutomationWizDLl );
// Register this Custom AppWizard with MFCAPWZ.DLl
SetCustomAppWizClass(&SDIAutomationWizaw);
}
else if (dwReason == DLl _PROCESS_DETACH)
{
TRACE0("SDIAUTOMATIONWIZ.AWX Terminating!
");
// Terminate the library before destructors are called
AfxTermExtensionModule(SDIAutomationWizDLl );
}
return 1; // ok
}
除了常规的CDynLinkLibrary MFC扩展动态链接库例程之外,还有一个对SetCustomAppWizClass()函数的调用。这个函数是从MFCAPWZ.DLL输出的,用于传递定制AppWizard 中CCustomAppWiz派生类的指针。因为MFCAPWZ.DLL通过调用CCustomAppWiz的成员函数来控制所有AppWizard的执行,因此它必须用这个指针来调用CCustomAppWiz派生类中重载的成员函数。
有一点必须牢记在心,那就是尽管你创建了定制的AppWizard,但MFCAPWZ.DLL仍然控制着一切。换句话说,你定制的AppWizard只是用于显示步进对话框,确定对话框以什么顺序显示,以及设置新工程的模人选项。一些重要的工作,诸如解析模板文件,合并Dictionary中的宏和模板文件中的占为符,创建工程文件等等还是要MFCAPWZ.DLL来做。
前面我们讲过,CCustomAppWiz类负责AppWizard与MFCAPWZ.DLL之间的通讯。实际上这种通讯是单边的。MFCAPWZ.DLL告诉你的CCustomAppWiz对象什么时候需要调用相应的虚拟成员函数。
CCustomAppWiz类中大约有十来个函数,其中只有五个函数是可以看到并使用的常用例程。通过这些函数的命名你基本上就能了解其主要作用。例如,InitCustomAppWiz()函数是进行初始化,包括初始化宏。除此之外,ExitCustomAppWiz()函数的作用是卸载AppWizard。
另外,还有两个函数用来控制步进对话框的显示顺序。Next()和Back()。不说肯定你也知道,这两个函数与AppWizard对话框中的Next和Back按钮是关联的。
最后一个很重要的函数是CustomizeProject(),一旦程序员完成工程选项的设置,AppWizard便创建工程的make文件并定义工程缺省的debug和release配置。然后AppWizard调用CustomizeProject()函数,以便定制的AppWizard能在存储工程之前修改make文件设置。
- ››Visual Studio自定义调试窗体两个小技巧
- ››Visual Studio 2005 Team Edition for Database P...
- ››Visual C#两分钟搭建BHO IE钩子
- ››Visual C++优化对大型数据集合的并发访问
- ››定制个性化的对话框窗口类
- ››VISUAL C++中的OCX控件的使用方法
- ››Visual C++实现视频图像处理技术
- ››Visual C++制作一个Sniffer实例
- ››Visual Studio 2010 中文试用版全面提供下载
- ››Visual C++剪贴板操作不完全攻略
- ››Visual C++编程实现摄像头视频捕捉
- ››Visual C++ 6.0 API函数操作技巧集
更多精彩
赞助商链接