在Visual C++中定制AppWizard (三)
2010-07-25 20:46:40 来源:WEB开发网——在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()));
}
}
- ››Visual Basic 2008 数学函数
- ››Visual Studio2005中Smart Device的问题
- ››Visual Studio 中根据数据库字段动态生成控件
- ››Visual Studio 11全新黑色主题
- ››Visual Studio 2011 Beta新特性(一):安装VS201...
- ››Visual Studio自定义调试窗体两个小技巧
- ››Visual Studio 2005 Team Edition for Database P...
- ››Visual C#两分钟搭建BHO IE钩子
- ››Visual C++优化对大型数据集合的并发访问
- ››定制个性化的对话框窗口类
- ››VISUAL C++中的OCX控件的使用方法
- ››Visual C++实现视频图像处理技术
更多精彩
赞助商链接