簡介:以記錄上一次關閉窗口時的信息的示例來說明配置文件的用法,例如記錄上次關閉窗口時的位置,上次關閉時的文字信息等。記錄的方式包括:記錄在註冊表中、記錄在配置文件(例如.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