首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MFC 對話框程式:實現「文件」選單最近打開檔案列表功能

     編輯:程式設計疑難解答

功能描述

在 MFC 對話框應用程式中,每次打開檔案後自動記錄到「文件」選單底部,用戶點選即可快速重新打開,類似記事本的「最近使用檔案」功能。

核心實現步驟

  1. 儲存檔案路徑列表:使用 CRecentFileList 類(MFC 內建)管理最近檔案清單,自動處理註冊表讀寫與 MRU (Most Recently Used) 邏輯。
  2. 初始化:在 CWinApp::InitInstance() 中建立實例:
m_pRecentFileList = new CRecentFileList(
    NULL,           // 無自定義存取器
    _T("Recent Files"), // 註冊表鍵值名
    _T("File%d"),   // 註冊表值名格式
    4,              // 最大記錄數
    ID_FILE_MRU_FILE1 // 起始命令 ID
);
  1. 打開檔案時添加記錄:
void CMyDialog::OnFileOpen()
{
    CFileDialog dlg(TRUE);
    if (dlg.DoModal() == IDOK) {
        CString path = dlg.GetPathName();
        if (OpenMyFile(path)) { // 自定義打開邏輯
            AfxGetApp()->m_pRecentFileList->Add(path); // 關鍵步驟
        }
    }
}
  1. 選單自動更新:MFC 框架會自動在「文件」選單生成最近檔案項目,無需手動操作選單。
  2. 處理用戶點選:框架自動發送 ID_FILE_MRU_FILE1 到 ID_FILE_MRU_FILE4 命令,在 ON_COMMAND_RANGE 中處理:
BEGIN_MESSAGE_MAP(CMyApp, CWinApp)
    ON_COMMAND_RANGE(ID_FILE_MRU_FILE1, ID_FILE_MRU_FILE4, OnOpenRecentFile)
END_MESSAGE_MAP()

void CMyApp::OnOpenRecentFile(UINT nID)
{
    int index = nID - ID_FILE_MRU_FILE1;
    CString path = m_pRecentFileList->GetDisplayName(index, NULL);
    if (!path.IsEmpty()) {
        // 找到主視窗並發送打開命令,或直接調用打開邏輯
        CMainFrame* pFrame = (CMainFrame*)m_pMainWnd;
        pFrame->OpenFile(path);
    }
}

不使用資源檔的純代碼實現

若不想用資源編輯器,可動態建立選單項:

CMenu* pFileMenu = GetMenu()->GetSubMenu(0); // 假設文件選單是第0個
pFileMenu->AppendMenu(MF_SEPARATOR);
for (int i = 0; i < m_pRecentFileList->GetSize(); i++) {
    CString name = m_pRecentFileList->GetDisplayName(i);
    if (!name.IsEmpty())
        pFileMenu->AppendMenu(MF_STRING, ID_FILE_MRU_FILE1 + i, name);
}

參考資源

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved