2010-06-19 22 views
0

是否有任何標準方式來處理WinAPI中的應用程序設置?我目前正在做的是這樣的:使用WinAPI進行應用程序設置

if(!ReadKey(some_setting)) 
    WriteKey(some_setting, some_setting_setting_default_value) 

當設置對話框初始化時。然後,我將小部件狀態設置爲從註冊表中讀取的相應值。問題是,如果應用程序第一次運行,則不能按照上述代碼模式讀取默認設置。在我的程序中,需要再讀一次ReadKey()才能將剛寫入的默認設置讀入設置變量中。這對我來說看起來有點笨拙。所以問題基本上是:

  • 是否有任何標準的方式來使用Win32的設置?
  • 最重要的是,有什麼辦法可以在安裝過程中設置默認的應用程序設置,因此會有代碼來設置默認設置嗎? (我猜是首選的方法,因爲你可以修改默認的應用程序設置而不用重建它)

同樣,這應該是純粹的Win32,沒有MFC允許的。

爲什麼這功課?這是關於是否有一套行之有效的做法的問題,而不是爲我工作的要求。現在我最好從那裏刪除「大學項目」的短語。

回答

1

你可能避免編寫硬編碼的默認值添加到註冊表,並留下注冊表空時,它包含了非默認值,除了:

string ReadRegistry(
    const string& some_setting, 
    const string& some_setting_default_value 
) 
{ 
    //try to read user-specified setting from registry 
    string rc; 
    if (ReadKey(some_setting, rc)) 
    { 
    return rc; 
    } 
    //else return hard-coded default value, not from registry 
    return some_setting_default_value; 
} 

或者你可以寫所有默認值添加到註冊表時該程序已安裝(在程序運行之前以及在嘗試從註冊表中讀取之前)。

是否有任何標準的方式來使用Win32的設置?

有沒有辦法安裝過程中設置了默認的應用程序設置

是,安裝程序可以寫入到註冊表中。

+0

所以我想用應用程序設置最常用的方式是在安裝過程中寫入默認值? – iksemyonov 2010-06-19 17:04:24

+0

@Semen Semenych - 我想這可能是一種常見的方式;並且存在兩個小缺點:a)如果註冊表中缺少值(例如由最終用戶刪除),則不夠健壯(比使用硬編碼的缺省值); b)不太容易知道註冊表中的值(如果它是默認值)是由安裝程序創建的,還是由最終用戶明確選擇/寫入的。 – ChrisW 2010-06-19 17:42:54

相關問題