1. 程式人生 > >最近檔案列表 及 LoadStdProfileSettings

最近檔案列表 及 LoadStdProfileSettings

最近檔案列表可以讓你很方便地開啟你以前曾經開啟過的文
件,那麼,如何為自己的應用程式加入最近檔案列表功能呢?
  最簡單的方法就是在你新建工程的時候選擇包含最近檔案列
表功能,也就是在 MFC AppWizard 的第 4 步的時候使 “How 
many files would you like on your recent file list?” 的
值不為 0 即可。
  如果你在新建工程的時候沒有選擇包含最近檔案列表功能,
那麼可以按照如下的方法為你的工程加入它:
  1.在你的“檔案”選單中新增一個名稱為“最近檔案”的菜
單項,其 ID 為 ID_FILE_MRU_FILE1。
  2.在你的工程的 App 類的 InitInstance 方法中將
    LoadStdProfileSettings(0);
改成:
    LoadStdProfileSettings();
即可。
  這樣,你的工程就有了最近檔案列表功能。
  事實上,以這種方法生成的最近檔案列表項是儲存在登錄檔
中 HKEY_CURRENT_USER/Sofrware/Loacl Appwizard-Generated 
Applications 下以你的工程名為主鍵的 Recent File List  主
鍵中 File? 格式的字串值中。LoadStdProfileSettings 的參
數值決定了儲存在這裡的最近檔案的數目,其預設值(沒有引數
時)為 4。 Loacl Appwizard-Generated Applications 主鍵是
Visual C++ 預設的,在工程的 App 類的 InitInstance 方法中
由 SetRegistryKey() 函式建立的,你可以將其改成你需要的名
稱,例如:
  SetRegistryKey(_T("skyice software"));
  那麼,如何處理從選單中選擇的最近檔案列表中的檔案呢?
由於在選單中只有 ID_FILE_MRU_FILE1  這一個選單項,其餘的
選單項都是由 LoadStdProfileSettings();  動態的加上的,因
此,用一般的方法難以實現對選單項的響應。此時,可以採用如
下的方法:
  1.在 CMainFrame 類中加入對選單項 ID_FILE_MRU_FILE1的
響應。
  2.在 MainFrm.cpp 中將
  ON_COMMAND(ID_FILE_MRU_FILE1,OnFileMruFile1)
改成
  ON_COMMAND_RANGE(ID_FILE_MRU_FILE1,ID_FILE_MRU_FILE4, 
OnFileMruFile1)
即可。
  以後,所有對最近檔案列表中檔案的選擇都由 CMainFrame 
方法 OnFileMruFile1 響應,你可以在此函式中判斷具體是選擇
了哪個檔案,進而做出相應的處理。