我是新來的MFC,一旦我在myApp :: InitInstance()中創建了我的第一個應用程序。我有將文件設置保存在ini而不是註冊表中
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
我可以刪除它並將設置保存到我自己的ini構造中嗎?
我是新來的MFC,一旦我在myApp :: InitInstance()中創建了我的第一個應用程序。我有將文件設置保存在ini而不是註冊表中
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
我可以刪除它並將設置保存到我自己的ini構造中嗎?
編輯:經過進一步測試,如果您的應用程序類別來自CWinAppEx
,以下解決方案不起作用!如果你的應用直接來源於CWinApp
,它確實有效。
存儲值在.ini
文件,而不是註冊表:
SetRegistryKey
。在您的應用類中,將m_pszProfileName
設置爲您的.ini
文件的完整路徑。文件名字符串必須使用malloc
進行分配,因爲當您的應用程序關閉時,框架將調用free
。首先free
現有的值,然後指派新的字符串:
free((void*)m_pszProfileName);
m_pszProfileName = ::_tcsdup(_T("C:\\somedir\\myini.ini"));
呼叫CWinApp::GetProfileInt
,CWinApp::WriteProfileInt
和類似的功能如常。
我強烈建議使用APPDATA下的路徑來存儲您的.ini
文件。
我不確定這是否可能,因爲.ini文件只有您的程序字符串。您可以創建一個操作系統腳本(.bat for windows,.sh for unix等)並使用system()調用來調用它。
是的,你可以。 CWinApp :: SetProfileXXX()實際上爲你實現了這一點 - 但在2010年,我不再使用這些方法,但當ppl從.ini移動到註冊表時,它們都可以。
我看到人們真的很喜歡ini文件,程序將會是可移植的,註冊表有時候會變得混亂。謝謝 – nXqd 2010-10-22 14:36:11
使用Win32 API的WriteProfileString(寫入INI文件)和GetProfileString(從INI文件中讀取) 如需更多幫助 MS-幫助://MS.MSDNQTR.v90.en/sysinfo/base/writeprofilestring .htm
這些函數已棄用並保留爲win16兼容性。你不應該使用它們或推薦它們。 – 2015-04-06 12:30:59
感謝您的回答:) – nXqd 2010-10-26 06:58:51
我發現如果您的應用程序類是「CWinAppEx」的子類,則此解決方案不起作用。如果您的應用程序是「CWinApp」的直接子類,它仍然有效。我使用基於「CWinApp」的基於對話框的應用程序對其進行了測試,這就是爲什麼我沒有發現錯誤。 – Nate 2010-10-27 19:14:40