WEB开发网
开发学院软件开发VC 在Visual C++中定制AppWizard (二) 阅读

在Visual C++中定制AppWizard (二)

 2010-07-25 20:46:43 来源:WEB开发网   
核心提示:——定义CCustomAppWiz 类虽然编译后的Custom AppWizard文件扩展名都是.awx,但是它实际上就是一个通常我们使用的Windows动态链接库(DLl)文件,在Visual C++中定制AppWizard (二)(2),如果你打开SDIAutomationWiz.cpp文件

——定义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文件设置。

Tags:Visual 定制 AppWizard

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接