MFC配置文件

来源:互联网 发布:处理器优化工具 编辑:程序博客网 时间:2024/05/16 04:06

简介:以记录上一次关闭窗口时的信息的示例来说明配置文件的用法,例如记录上次关闭窗口时的位置,上次关闭时的文字信息等。记录的方式包括:记录在注册表中、记录在配置文件(例如.ini文件)

记录方式
记录方式的选择放在程序开始初始化的 InitInstance 方法中。
1、使用注册表方式记录

void SetRegistryKey(   LPCTSTR lpszRegistryKey );void SetRegistryKey(   UINT nIDRegistryKey );

功能:写入一个字符串的键值或者一个整型的键值(此处为注册表里的键值)
使用方法举例:
注册表方法:创建一个myProj的键值

SetRegistryKey(_T("myProj"));

这里写图片描述
配置文件方法:创建一个配置文件myProj.ini

delete[]this->m_pszProfileName;this->m_pszProfileName = new TCHAR[64];_tcscpy_s((LPTSTR)m_pszProfileName,64,_T("./myProj.ini"));

2、使用配置文件方式记录
在MFC中直接使用 theApp 中的类成员变量 m_pszProfileName 即可,使用的方法也很简单,例如我要在我程序的执行目录写配置文件myProj.ini:

theApp.m_pszProfileName = _T("./myProj.ini");

记录的相关方法
使用配置文件与注册表记录,都是使用相同的方法。
1、写入记录的方法
写入记录,我们一般的实现是在窗口销毁的上一步将下次所需要的记录写入到我们的注册表或配置文件中,方便下次使用
WriteProfileInt

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

功能:调用该成员函数将指定到应用程序的注册表或.INI文件的指定部分。
MSDN的参数解释:
lpszSection
指向指定包含项的节的一个Null终止的字符串。 如果节不存在,则创建。 该节的名称是用例独立;该字符串可以是大写和小写字母的任意组合。

lpszEntry
指向包含项该值将写入的一个Null终止的字符串。 如果项不存在于指定的部分,则创建。

nValue
包含要写入的值

其实并没有那么复杂,举个示例说明:
我先在把我窗口的位置记录下来,方便下次打开的时候在上次关闭时的地方显示出来。

RECT rc;    GetWindowRect(&rc);    theApp.WriteProfileInt(_T("SETTING"), _T("LEFT"), rc.left);    theApp.WriteProfileInt(_T("SETTING"), _T("RIGHT"), rc.right);    theApp.WriteProfileInt(_T("SETTING"), _T("TOP"), rc.top);    theApp.WriteProfileInt(_T("SETTING"), _T("BOTTOM"), rc.bottom);

在注册表中的存在方式,注意对参数的理解:
这里写图片描述
如果使用的配置文件,在myProj.ini中的显示方式为:

[SETTING]LEFT=906RIGHT=1482TOP=117BOTTOM=505

同理的方法还有,具体用法原理相同:
WriteProfileString
WriteProfileBinary

2、获取记录的方法
GetProfileInt

UINT GetProfileInt(   LPCTSTR lpszSection,   LPCTSTR lpszEntry,   int nDefault );

功能:调用该成员函数从应用程序的注册表或.INI文件中的指定部分中检索项的整数值。
MSDN中的参数解释:
lpszSection
指向指定包含项的节的一个Null终止的字符串。

lpszEntry
指向包含项值要检索的一个Null终止的字符串。

nDefault
如果该结构找不到项,指定默认值返回。 该值可以是在0到65,535之间的无符号值或在该范围(– 32,768到32,767的有符号值。

举个实例:
我们获取上次记录的位置信息,然后在上次窗口的位置显示出来

RECT rc = { 0 };    rc.left = theApp.GetProfileInt(_T("SETTING"), _T("LEFT"), 0);    rc.right = theApp.GetProfileInt(_T("SETTING"), _T("RIGHT"), 0);    rc.top = theApp.GetProfileInt(_T("SETTING"), _T("TOP"), 0);    rc.bottom = theApp.GetProfileInt(_T("SETTING"), _T("BOTTOM"), 0);    if (rc.left || rc.right || rc.bottom || rc.top)    {        MoveWindow(&rc);    }

同样的方法有:
GetProfileString
GetProfileBinary

注:我们可以在程序中写入信息,也可以手动写入信息来操作我们的程序,程序在启动的时候就会按照我们配置文件的说明来执行程序。
示例代码:https://pan.baidu.com/s/1qXLcPty