MFC配置文件

简介:以记录上一次关闭窗口时的信息的示例来说明配置文件的用法,例如记录上次关闭窗口时的位置,上次关闭时的文字信息等。记录的方式包括:记录在注册表中、记录在配置文件(例如.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=906
RIGHT=1482
TOP=117
BOTTOM=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

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值