2012-10-10 158 views
3

如何存儲稍後可以加載到我的應用程序中的設置?Win32應用程序設置

例如,我有一個編輯控件,用戶可以更改字體,字體顏色和背景顏色。當用戶改變這些時,我想保存它們,以便當用戶再次打開應用程序時,字體和顏色將與它們留下的相同。

我曾經想過寫入Windows註冊表,但我不僅困惑於如何在那裏保存字體(或者即使你可以做這樣的事情),但我也有一個便攜版本,可以是從閃存驅動器運行。有沒有辦法將這些設置保存到與可執行文件位於同一目錄中的文件?如果是這樣,我將如何去保存和加載這些?

如果沒有辦法使用設置文件來完成此操作,我如何使用Windows註冊表執行此操作?

+0

如果你可以使用Boost庫,你應該檢討['提振:: property_tree'(http://www.bo ost.org/doc/libs/1_44_0/doc/html/property_tree.html#boost_propertytree.intro)庫。我從來沒有用過這個,但似乎是你以後的樣子。 – hmjd

回答

3

最好的辦法海事組織將其存儲在INI文件,例如,一個文件:app.ini

[AppSettings] 
fntBackground=255 255 0 
fntFace=Tahome 

[LoadDialog] 
... 

這是很容易把它寫自己,你也可以找到在CodeProject準備班,我採取了快速搜索,發現這個:

http://www.codeproject.com/Articles/5401/CIni

看起來很有希望

+0

是的,看起來很有希望。現在,這可能是一個完整的問題,但可以說.ini文件在我的可執行文件的旁邊,該文件位於'C:\ Program Files \ MyProgram'中,我將如何獲得對它的寫入?如果用戶不能提供應用程序管理權限呢?我想仍然可以運行我的程序,但我想只是在更改設置時不保存設置。 –

+0

如果你沒有這個問題,我可以不用回答這個問題,但是我真正想知道的一件事是:可以不用寫一個int,bool或char到INI文件我爲它寫了一個'LOGFONT'結構?如果沒有,我將不得不將每個'LOGFONT'結構的成員保存到一個不同的鍵,並以某種方式處理將'long'和'BYTE'轉換爲整數。 –

+1

在應用程序數據文件夾中存儲設置,以在此處獲取其路徑:http://stackoverflow.com/questions/2899013/how-do-i-get-the-application-data-path-in-windows-using-c 。 – marcinj

2

如果您的應用程序被允許寫入文件夾,那麼您可以像許多Windows應用程序一樣使用.ini文件。您可以讀取和寫入與GetPrivateProfile/WritePrivateProfile的API文件,e.g GetPrivateProfileInt

如果您使用的是一些框架,這是可能的,它也提供了友好的版本的API(如MFC提供CWinApp::GetProfileInt等)。

2

在Zdeslav Vojkovic說,閱讀Windows配置信息的最簡單方法是使用GetPrivateProfileString/WritePrivateProfileString函數。

但是,您會看到:注意此功能僅用於與基於16位Windows的應用程序兼容。應用程序應該在註冊表中存儲初始化信息現在已經過時並且經常被禁止。建議(但通常只是簡單的方式)要求您使用XML files。然後你可以使用任何你喜歡的方法 - DOM,SAX,XMLLite

+0

SOM/SAX ... - 爲什麼複雜簡單的事情? – marcinj

+0

這取決於要求。 – SChepurin