向基于对话框的 MFC 应用程序添加最近使用的文件列表
本文演示了如何向基于对话框的应用程序添加最近使用的文件列表。
引言
我经常编写简单的实用程序来帮助使编程更容易。当我开始编写 DOS 应用程序时,我经常编写简单的命令行实用程序来执行一些繁琐的任务。当我转向 Windows 世界时,我继续将这些简单的实用程序编写为命令行程序,直到我开始使用 MFC。MFC 对话框应用程序为我提供了我认为是 Windows 世界的 DOS 命令行实用程序。
我在基于 MFC 对话框的应用程序中缺失的一件事是我在许多 Windows 应用程序中喜欢使用的最近文件列表。
实际上,将最近文件列表功能添加到基于 MFC 对话框的应用程序并不难。首先要做的是将菜单添加到对话框中。确保为其赋予 IDR_MAINFRAME
id。这是 MFC 内部用于执行某些操作(例如最近文件列表)的特殊 id 之一。在添加菜单后,向该菜单添加一个包含 id ID_FILE_MRU_FILE1
的条目。添加菜单后,需要修改应用程序的 CWinApp::InitInstance
调用。您需要添加两个调用
SetRegistryKey(_T("CodeProject Recent File List Dialog Demo"));
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
SetRegistryKey
将在 Windows 注册数据库中设置一个位置来存储应用程序的最近文件列表条目。LoadStdProfileSettings
将加载标准的 INI 文件选项,其中包括应用程序最近的文件列表。您还需要重写 CWinApp::OpenDocumentFile
函数。当您从最近文件列表中选择文件时,将调用此函数。您会注意到在示例应用程序中,该函数返回 1 而不是 CDocument*
。这是可以完成的,因为调用函数 CWinApp::OnOpenRecentFile
不使用返回值。最后需要做的事情是使菜单显示最近文件列表。这是通过在对话框类中重写 WM_INITMENUPOPUP
来完成的。在 OnInitMenuPopup
函数内部,您将强制调用菜单的 OnUpdate
处理程序。特别是,我们需要为最近文件列表菜单项调用 CWinApp::OnUpdateRecentFileMenu
的 OnUpdate
处理程序。在设置用于调用 OnUpdateRecentFileMenu
的 CCmdUI
时,我们需要确保设置 m_nIndexMax
值,否则当注册表中没有最近文件时,您将断言。