查了一下文件:http://msdn.microsoft.com/zh-tw/library/7c2w6z4k(v=vs.80).aspx
因為根據文件所指,SetRegistryKey 會幫你做好在 HKEY_CURRENT_USER\Software 中建立應用程式機碼的準備,為何稱為準備呢,因為僅是調用 SetRegistryKey 並不會立即建立機碼,必須搭配以下六個 Function 使用才會建立應用程式對應的機碼,而這六個 Function 是方便開發者讀寫機碼用的
GetProfileInt // 取得整數型態的機碼
GetProfileString // 取得字串型態的機碼
GetProfileBinary // 取得二進位型態的機碼
WriteProfileInt // 寫入整數型態的機碼
WriteProfileString // 寫入字串型態的機碼
WriteProfileBinary // 寫入二進位型態的機碼
在使用了上敘的 6 個 Function 任何一支即會在以下路徑產生資料,
HKEY_CURRENT_USER\Software\<company name>\<application name>\<section name>\<value name>
例如我調用了以下指令
SetRegistryKey(_T("Ascii"));
WriteProfileInt(_T("Settings"), _T("dwAutoLogin"), TRUE);
此時就會在此處建立 Key 為 dwAutoLogin 且 Value 為 1 的一筆值,
HKEY_CURRENT_USER/software/Ascii/TestApp/Settings/
可以注意到,SetRegistryKey 中所設定的值其實是對應到 company name,而非 application name,所以如果我們在公司內有開發多支應用程式,其實理論上都是以同樣的 Key 建立才對,底下再又依應用程式名稱做分別。
此外有一點需要特別注意,上面提到的 6 個 Function 是屬於 CWinApp 的成員函式,所以在 CWinApp 以外的類別是無法使用的,必須透過建立 MFC 專案時,VS 幫我們自動產生的 theApp 物件來操作此 6 個 Function,例如我們建立 TestApp 時,VS 會自動幫我們產生以下程式碼,而其他類別目然就可以使用 theApp 操作 CWinApp 的資源如下
class CTestApp : public CWinApp
{
public:
CTestApp();
public:
virtual BOOL InitInstance();
DECLARE_MESSAGE_MAP()
};
extern CTestApp theApp;
void CSettingDialog::InitPageData()
{
BOOL bAutoLogin = theApp.GetProfileInt(_T("Settings"), _T("dwAutoLogin"), FALSE);
chkAutoLogin.SetCheck(bAutoLogin);
}
沒有留言:
張貼留言