VC++ MFC中如何将应用程序的配置信息保存到注册表中(一)

  • A+
所属分类:C++
摘要

注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。比如我们打开一个记事本,调整其窗口大小,使用完毕后关闭记事本,下次打开时大小和上次关闭前的大小和在屏幕上的位置是相同。这些位置和大小信息就是在记事本关闭时保存到注册表中,下次打开时我们从注册表中取出这些数据,并按照这些数据显示记事本程序的大小和位置信息。

[摘要]本文是对VC++ MFC中如何将应用程序的配置信息保存到注册表中(一)的讲解,对学习C++编程技术有所帮助,与大家分享。

注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。比如我们打开一个记事本,调整其窗口大小,使用完毕后关闭记事本,下次打开时大小和上次关闭前的大小和在屏幕上的位置是相同。这些位置和大小信息就是在记事本关闭时保存到注册表中,下次打开时我们从注册表中取出这些数据,并按照这些数据显示记事本程序的大小和位置信息。

下面教你如何使用GetProfileInt,WriteProfileInt,GetProfileString,WriteProfileString,SetRegistryKey这5个函数把你想要保存的应用程序信息保存到注册表中,如何从注册表中取出来。

UINT WINAPI GetProfileInt( LPCTSTR lpAppName,  LPCTSTR lpKeyName, int nDefault);

BOOL WriteProfileInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, int nValue);

BOOL WINAPI WriteProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString);

BOOL WriteProfileInt(LPCTSTR lpszSection,LPCTSTR lpszEntry,int nValue );

上面4个函数是CWinApp类中提供了一组用于读写应用程序配置的方法的接口,可方便的用于读写应用程序配置。具体的函数声明和参数解释可以参考MSDN。

下面就教你如何才能够把你想要保存的一些信息保存到注册表中。

1. 用VC++的向导建立基于对话框的MFC项目之后,在CClassApp::InitInstance()函数定义中添加这样的语句:

SetRegistryKey(_T("应用程序向导生成的本地应用程序"));

该函数将为以上提到的几个方法建立工作环境,此时如果用WriteProfileInt写入数据,将会被写入到如下注册表位置:

HKEY_CURRENT_USER/Software/应用程序向导生成的本地应用程序/应用程序名称/

你可以打开注册表查看一下是否有了对应的键值项。

如果在InitInstance中不执行SetRegistryKey,则用WriteProfileInt写入数据时,将写入到%windir%/应用程序名称.ini中。

2. 向注册表中写入需要保存的数据

a. 如果在InitInstance中执行了SetRegistryKey("应用程序向导生成的本地应用程序"); 则对于:

WriteProfileInt("section","val1",10);

将在注册表中如下路径写入数据:
[HKEY_CURRENT_USER/Software/应用程序向导生成的本地应用程序/应用程序名称/section] "val1"=dword:0000000a

b. 如果在InitInstance中没执行SetRegistryKey 则对于:

WriteProfileInt("section","val1",10);

将在“%windir%/测试应用程序.ini”中写入:
[section]

val1=10

3.从注册表中读取需要的值

GetProfileInt("section","val1",10);

最后一个参数是默认值,如果没有从注册表中取得任何值,将使用这个默认的值。

对于取得字符串类型的值用法大致相同使用的是GetProfileString和WriteProfileString接口。

下面是一个测试例程,你可以放到工程中测试一下!

先在CTestClassApp::InitInstance()中添加SetRegistryKey函数

BOOL CTestClassApp::InitInstance()
{
    SetRegistryKey(_T("Test Regedit Solutions"));

    AfxEnableControlContainer();
    .............  //此处代码省略
    .............
    return FALSE;
}

可以在对话框的OK按钮的响应函数中添加下面的测试代码

void CTestClassDlg::OnOK() 
{    
    AfxGetApp()->WriteProfileInt("Settings", "Int", 21);
    AfxGetApp()->WriteProfileString("Settings", "String", _T("Welcome you come here!")); 

    int nGetInt = AfxGetApp()->GetProfileInt("Settings", "Int", 21);
    CString strGetString = AfxGetApp()->GetProfileString("Settings", "String", _T("Welcome you come here!")); 

    TCHAR szBuffer[256];
    wsprintf(szBuffer,_T("int:%d  string:%s"),nGetInt,strGetString);

    AfxMessageBox(szBuffer);
    //CDialog::OnOK();
}

运行程序点击OK按钮弹出对话框

VC++  MFC中如何将应用程序的配置信息保存到注册表中(一)

取得的值和我们程序中写入的值相同。

让后在查找程序中输入regedit打开注册表,按上面的路径找到响应的位置,查看键值和对应的数据如下图所示

VC++  MFC中如何将应用程序的配置信息保存到注册表中(一)

VC++  MFC中如何将应用程序的配置信息保存到注册表中(一)

发现保存的值也是正确的。

有了这些我们就可以在注册表中保存我们需要保存的一些简单的程序配置信息数据了。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: