Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 保存和恢复用户优先选项(注册表)
【标  题】:保存和恢复用户优先选项(注册表)
【关键字】:
【来  源】:http://blog.csdn.net/birdme007/archive/2007/04/11/1560521.aspx

保存和恢复用户优先选项(注册表)

Your Ad Here  目标
保存并恢复用户在前面例子中选定的选项。
策略
使用六个CWinApp函数把选项值装入并保存到系统注册表中。
步骤
1.配置应用程序
1)把下面列出的#define语句添加到主框架类的定义文件中,用用户公司名字来替换
“Company”,以及用应用程序选项的描述性名字替换“Optionx”。
#defineCOMPANY_KEY "Company"
#defineSETTINGS_KEY "Settings"
#defineOPTION1_KEY "Option1"
#defineOPTION2_KEY "Option2"
#defineOPTION3_KEY "Option3"
#defineOPTION4_KEY "Option4"
2)在CMainFrame类中,用用户公司的系统注册表项修改InitInstance()中的SetRegistrykey()
第5章应用程序与环境97
下载
调用。
SetRegistryKey(COMPANY_KEY);
2.保存应用程序选项
1)把一个新的成员函数添加到CMainFrame类中,用来保存选项。在该函数中,可用多达
三种不同的CWinApp函数来保存整型、字符和二进制选项。
voidCMainFrame::SaveOptions()
{
//integeroptions
AfxGetApp()->WriteProfileInt(SETTINGS_KEY,OPTION2_KEY,
m_nOption2);
//stringoptions
AfxGetApp()->
WriteProfileString(SETTINGS_KEY,OPTION1_KEY,m_sOption1);
//binaryoptions
AfxGetApp()->WriteProfileBinary(SETTINGS_KEY,OPTION3_KEY,
(BYTE*)&m_dOption3,sizeof(m_dOption3));
}
2)用ClassWizard把一个WM_CLOSE消息处理函数添加到CMainFrame类中,并从那里调
用SaveOptions()。
3.恢复应用程序选项
1)把另一个成员函数添加到CMainFrame类中,用来装入选项。在那里,可以用另外三个
CWinApp函数在系统注册表装入整数、字符型和二进制选项。
voidCMainFrame::LoadOptions()
{
//integeroptions
m_nOption2=AfxGetApp()->
GetProfileInt(SETTINGS_KEY,OPTION2_KEY,3);
//stringoptions
m_sOption1=AfxGetApp()->
GetProfileString(SETTINGS_KEY,OPTION1_KEY,"Default");
//binaryoptions
BYTE*p;
UINTsize;
m_dOption3=33.3;
if(AfxGetApp()->GetProfileBinary(SETTINGS_KEY,OPTION3_KEY,
&p,&size))
{
memcpy(&m_dOption3,p,size);
delete[]p;
}
}
2)在CMainFrame类的OnCreate()函数的开始处调用LoadOptions().。
GetProfileBinary()和WriteProfileBinary()是非文档化的,并且可能在所有版本的MFC中
都找不到,如果它不在用户的MFC中,下面步骤可以创建备份的LoadOptions()和
SaveOptions(),下面的方法还允许用户从系统注册表的任何位置保存和装入选项。
98第二部分用户界面实例
下载
4.备用LoadOptions()和SaveOptions()
1)在项目的包含文件中添加一项#define语句,并用应用程序名字替换“Wzd”。
#defineAPPLICATION_KEY"Software\\Company\\Wzd\\Settings"
2)然后,把下面的代码写入SaveOptions()函数中,该函数打开系统注册表,并把选项写
到它里面,然后直接用WindowAPI关闭它。
voidCMainFrame::SaveOptions()
{
//openssystemregistryforwriting
HKEYkey;
DWORDsize,type,disposition;
if(RegOpenKeyEx(HKEY_CURRENT_USER,APPLICATION_KEY,0,
KEY_WRITE,&key)!=ERROR_SUCCESS)
{
RegCreateKeyEx(HKEY_CURRENT_USER,APPLICATION_KEY,0,"",
REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,
&key,&disposition);
}
//writesanoptionthat’sastring
type=REG_SZ;
size=m_sOption1.GetLength();
RegSetValueEx(key,OPTION1_KEY,0,type,
(LPBYTE)LPCSTR(m_sOption1),size);
//writesanoptionthat’saninteger
type=REG_DWORD;
size=4;
RegSetValueEx(
key,OPTION2_KEY,0,type,(LPBYTE)&m_nOption2,size);
//writesallotheroptions
type=REG_BINARY;
size=sizeof(DOUBLE);
RegSetValueEx(
key,OPTION3_KEY,0,type,(LPBYTE)&m_dOption3,size);
//closessystemregistry
RegCloseKey(key);
}
3)在LoadOptions()中添加下面的代码,它将打开系统注册表,读进选项,然后关闭系统
注册表。
voidCMainFrame::LoadOptions()
{
HKEYkey;
DWORDsize,type;
if(RegOpenKeyEx(
第5章应用程序与环境99
下载
HKEY_CURRENT_USER,APPLICATION_KEY,0,KEY_READ,&key)==
ERROR_SUCCESS)
{
//readstringoptions
size=128;
type=REG_SZ;
LPSTRpsz=m_sOption1.GetBuffer(size);
RegQueryValueEx(
key,OPTION1_KEY,0,&type,(LPBYTE)psz,&size);
m_sOption1.ReleaseBuffer();
//readintegeroptions
size=4;
type=REG_DWORD;
RegQueryValueEx(key,OPTION2_KEY,0,&type,
(LPBYTE)&m_nOption2,&size);
//readallotheroptionsasbinarybytes
size=sizeof(DOUBLE);
type=REG_BINARY;
RegQueryValueEx(key,OPTION3_KEY,0,&type,
(LPBYTE)&m_dOption3,&size);
RegCloseKey(key);
}
}
说明
■用Windows目录中的REGEDIT.EXE应用程序可以编辑写到系统注册表的选项,可以在
HKEY_CURRENT_USER/Software/Company下找到应用程序项。
■本例中我们以整型、字符串型和二进制型来保存一个选项,事实上所有选项可以以二
进制值形式保存。然而,只要有可能,尽量使用一个整型或字符串型,因为
REGEDIT.EXE应用程序可以更轻松地编辑这些值,字符串还是以字符串出现,整型还
是以整型出现,而二进制型只以一串字节的形式出现。
■如果在本节中“配置应用程序”的第二步注释掉SetRegistryKey(),则选项将被保存到
文件中而不是系统注册表中。该文件将在你的\Windows目录下,并命名为app.ini,app
是应用程序的名字。旧版的Windows用这种方法来保存选项。
VC常用技术新编:【上一篇】
C++:memset ,memcpy 和strcpy 的区别:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • CompanyX.tld 的 Windows NT 4.0 / Windows 2000 IIS 性能比较
  • QQ不显示摄像头
  • 用shell写网页时遇到的问题
  • 利用 ASP.NET 的内置功能抵御 Web 攻击
  • 排序
  • 红旗使用中必须注意的
  • [转载]免光软的Debian最简硬盘安装法(BF2.4)
  • 不和危险靠近 远离电脑病毒的八项原则
  • 主流WEB服务器软件比较
  • 一站式系统
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.