This method is called from within the
InitInstance method to enable and load the list of most recently used (MRU) files and last preview state. If
nMaxMRU is zero, no MRU list will be maintained.
最近檔案清單可以讓你很方便地開啟你以前曾經開啟過的檔案,那麼,如何為自己的應用程式加入最近檔案清單功能呢?最簡單的方法就是在你建立工程的時候選擇包含最近檔案清單功能,也就是在 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 響應,你可以在此函數中判斷具體是選擇了哪個檔案,進而做出相應的處理。