c++技巧之二(MFC)

字號:

有人發(fā)電子郵件問我如何用MFC應(yīng)用程序得到最近打開過文件列表中的完整路徑和文件名稱。 僅當(dāng)當(dāng)前的目錄不同于文件定位的目錄時,缺省行為是顯示完整路徑。如果太長,將簡寫路徑名稱。
    在最近的文件列表中被顯示的文件名由CRecentFileList::GetDisplayName函數(shù)建立。此函數(shù)由CRecentFileList::UpdateMenu呼叫,它被CWinApp::On- UpdateRecentFileMenu函數(shù)呼叫,CWinApp::OnUpdateRecentFileMenu函數(shù)被呼叫以響應(yīng)更新命令。
    ON_UPDATE_COMMAND_UI(ID_FILE_MRU_FILE1, OnUpdateRecentFileMenu) appcore.cpp中信息映射入口。
    void CWinApp::OnUpdateRecentFileMenu(CCmdUI*pCmdUI)
    {
     ASSERT_VALID(this);
     if (m_pRecentFileList == NULL)
    // no MRU files
    //沒有MRU 文件
     pCmdUI->Enable(FALSE);
     else
     // ***This function will call GetDisplayName. ***
    // ***此函數(shù)將呼叫GetDisplayName ***
     m_pRecentFileList->UpdateMenu(pCmdUI);
    }
    對于這問題的一種解決方案是在派生自InitInstance的CWinApp中的LoadStdProfileSettings調(diào)用之后刪除CRecentFileList* m_pRecentFileList。我們以一個我們自己派生自CRecentFileList的類替換它(列表6 )。 我們的CRecentFileList將重載(override) GetDisplayName函數(shù)。確使CRecentFileList 派生類構(gòu)造器參數(shù)nSize設(shè)置到LoadStdProfileSettings的參數(shù)nMaxMRU。 那就它的全部。 在這個月的代碼檔案文件中,我已包括顯示這個演示例子,以及一個如何用一個MFC對話應(yīng)用程序顯示一個最近的文件列表的例子,還有。 缺省情況下,MFC對話應(yīng)用程序不支持最近的文件列表。
    ------------------------------------------------
    George Frazier是Cadence Design Systems Inc公司System Design and Verification 組的一名軟件工程師,自1991年以來為一直編寫Windows程序。 可以通過他的電子信箱georgefrazier@yahoo.com與之聯(lián)系。