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

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

 2010-07-25 20:46:40 来源:WEB开发网   
核心提示:——在CCustomAppWiz派生类中引入注册表的操作为了存取注册表信息,我们在定制的AppWizard工程中使用了一个封装类CRegistry,在Visual C++中定制AppWizard (三)(10),这个类封装了针对注册表的常用操作,我们要对CVckbaseWizAppWiz实现进行

——在CCustomAppWiz派生类中引入注册表的操作

为了存取注册表信息,我们在定制的AppWizard工程中使用了一个封装类CRegistry。这个类封装了针对注册表的常用操作。我们要对CVckbaseWizAppWiz实现进行修改。以便能在它的实现中使用CRegistry类存取注册表。方法如下:

1、 打开VckbaseWizAw.cpp,在“#include "chooser.h"” 包含语句后面加上“#include "registry.h"”

2、 在InitCustomAppWiz成员函数前面加上如下注册表键值定义:

#define VCKBASEWIZ_KEY "Software\VCKBASE\VckbaseWiz"

3、 在VCKBASEWIZ_KEY #define指令之后,定义下列静态结构,其中包含:宏名、注册表值名、宏的缺省值。注册表值名被用来在注册表中查找VCKBASEWIZ_KEY指定的键。如果没有找到键值(例如第一次运行程序时),则会使用宏的缺省值:

static struct
{
    char szMacroName[50];
    char szRegistryValueName[50];
    char szMacroDefaultValue[1024];//512个汉字
} macroPairs[] = {
    "PROGRAMMER", "Programmer", "程序员",
    "WEB_PAGE", "Web Page", "网站",
    "GENERAL_INFO", "General Info", "程序描述",
    "COMMENT_INFO", "Comment Info", "程序注释"
};

4、 将下列代码添加到CVckbaseWizAppWiz::InitCustomAppWiz()函数末尾,其作用是在堆栈创建CRegistry对象,然后遍历上一步定义的静态结构。对于这个宏结构数组每一个元素,程序都会在注册表中找对应值,如果找到则取注册表中的值,否则取缺省值。不论哪一种情况,宏的值一旦建立,Dictionary字典的值就被更新为当前宏的值:

CRegistry registry(HKEY_LOCAL_MACHINE, VCKBASEWIZ_KEY);
CString strValue;
    for (int i = 0; i < sizeof macroPairs / sizeof macroPairs[0]; i++)
    {
        if (registry.ReadString(macroPairs[i].szRegistryValueName, strValue.GetBuffer(strValue.GetLength())))
        {
           m_Dictionary.SetAt(macroPairs[i].szMacroName, strValue);
        }
        else
        {
           m_Dictionary.SetAt(macroPairs[i].szMacroName, macroPairs[i].szMacroDefaultValue);
           if (m_Dictionary.Lookup(macroPairs[i].szMacroName, strValue))
           {
               registry.WriteString(macroPairs[i].szRegistryValueName, strValue.GetBuffer(strValue.GetLength()));
           }
        }
    }

5、 将下列代码添加到CVckbaseWizAppWiz::ExitCustomAppWiz()函数末尾,其作用是当卸载定制的AppWizard DLL时程序会调用这个函数存储数据。CRegistry registry(HKEY_LOCAL_MACHINE, VCKBASEWIZ_KEY);
CString strValue;
    for (int i = 0; i < sizeof macroPairs / sizeof macroPairs[0]; i++)
    {
        if (m_Dictionary.Lookup(macroPairs[i].szMacroName, strValue))
        {
           registry.WriteString(macroPairs[i].szRegistryValueName, strValue.GetBuffer(strValue.GetLength()));
        }
    }

上一页  5 6 7 8 9 10 11  下一页

Tags:Visual 定制 AppWizard

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