如果要使你的程序对用户友好,那么存储用户设置以及程序运行的首选项是很重要的。目前比较通行的做法是将这些信息存储在注册表中。这也是Windows 徽标(Logo)程序的要求。
在注册表中存储用户程序信息的原理很简单,无非是保证应用程序知道要将信息存储在注册表的什么地方,当需要这些信息时能通过MFC函数对信息进行读写操作。按照规范,应用程序首选和设置信息应该保持和存储在注册表的HKEY_CURRENT_USER/Software键中。这个规范还包括在这个路径中使用下层子键保存软件开发公司的名称、应用程序名称,然后可以添加分类子键和值来存储其它一些设置。例如:HKEY_CURRENT_USER/Software/VCKBASEStudio/DeskShow下保存着VCKBASE工作室开发的DeskShow程序信息。具体代码很简单。如要设置公司名称,则可以在InitInstance()中用CWinApp::SetRegistryKey()函数。例如:
BOOL MyApp::InitInstance()
{
SetRegistryKey(_T("VCKBASEStudio "));
……
}
如果你希望下一个子键是工程的名字,那么什么代码都不用写就可以读写注册表存取工程名,MFC会将工程名作为默认的设置。如果因为别的原因你想要修改工程名,用下面的代码很容易实现。
free((void *)m_pszProfileName);
m_pszProfileName = _tcsdup(_T("DeskShow"));
现在你只要用CWinApp 函数GetProfileString()、GetProfileInt()、GetProfileBinary()、WriteProfileString()、WriteProfileInt()和WriteProfileBinary()随心所欲存取注册表的值。例如:
void MyClass::MyFunction()
{
CString lastfilename = AfxGetApp()->GetProfileString(_T("Initialize"),
_T("LoadFile"), _T(""));
AfxGetApp()->WriteProfileInt(_T("Epochs"), T("CurrentTime"),
m_currtime);
……
}
第一次调用GetProfileString函数从注册表的HKEY_CURRENT_USER/Software/VCKBASEStudio/DeskShow/Initialize键中获取LoadFile值,如果没找到这个值则返回空串。第二次调用WriteProfileInt将成员变量m_currtime写入子键DeskShow.的Epochs项下CurrentTime键值中。即HKEY_CURRENT_USER/Software/ VCKBASEStudio /DeskShow/Epochs的CurrentTime值域。这些函数让我们能很轻松地使用注册表存储程序设置。
在注册表中存储用户程序信息的原理很简单,无非是保证应用程序知道要将信息存储在注册表的什么地方,当需要这些信息时能通过MFC函数对信息进行读写操作。按照规范,应用程序首选和设置信息应该保持和存储在注册表的HKEY_CURRENT_USER/Software键中。这个规范还包括在这个路径中使用下层子键保存软件开发公司的名称、应用程序名称,然后可以添加分类子键和值来存储其它一些设置。例如:HKEY_CURRENT_USER/Software/VCKBASEStudio/DeskShow下保存着VCKBASE工作室开发的DeskShow程序信息。具体代码很简单。如要设置公司名称,则可以在InitInstance()中用CWinApp::SetRegistryKey()函数。例如:
BOOL MyApp::InitInstance()
{
SetRegistryKey(_T("VCKBASEStudio "));
……
}
如果你希望下一个子键是工程的名字,那么什么代码都不用写就可以读写注册表存取工程名,MFC会将工程名作为默认的设置。如果因为别的原因你想要修改工程名,用下面的代码很容易实现。
free((void *)m_pszProfileName);
m_pszProfileName = _tcsdup(_T("DeskShow"));
现在你只要用CWinApp 函数GetProfileString()、GetProfileInt()、GetProfileBinary()、WriteProfileString()、WriteProfileInt()和WriteProfileBinary()随心所欲存取注册表的值。例如:
void MyClass::MyFunction()
{
CString lastfilename = AfxGetApp()->GetProfileString(_T("Initialize"),
_T("LoadFile"), _T(""));
AfxGetApp()->WriteProfileInt(_T("Epochs"), T("CurrentTime"),
m_currtime);
……
}
第一次调用GetProfileString函数从注册表的HKEY_CURRENT_USER/Software/VCKBASEStudio/DeskShow/Initialize键中获取LoadFile值,如果没找到这个值则返回空串。第二次调用WriteProfileInt将成员变量m_currtime写入子键DeskShow.的Epochs项下CurrentTime键值中。即HKEY_CURRENT_USER/Software/ VCKBASEStudio /DeskShow/Epochs的CurrentTime值域。这些函数让我们能很轻松地使用注册表存储程序设置。