|
发表于 2020-1-6 00:36:01
|
显示全部楼层
二、最近打开文件列表的原理
为了实现对话框应用的最近打开文件列表功能,首先需要介绍MDI和SDI应用的最近打开文件列表的实现方法。由于是由文档/视框架自动完成的,因此MDI和SDI应用中隐含了实现细节。
在MFC的MDI和SDI应用中,有一个菜单资源项目ID_FILE_MRU_FILE1,当应用运行时,MFC自动将该菜单项转换成用户最近打开的文件列表。对菜单的更新是由WM_INITMENU消息触发的,在MFC的源代码appui.cpp中,可以看到ID_FILE_MRU_FILE1更新的处理函数
ON_UPDATE_COMMAND_UI(ID_FILE_MRU_FILE1, OnUpdateRecentFileMenu)
ON_COMMAND_EX_RANGE(ID_FILE_MRU_FILE1,ID_FILE_MRU_FILE16, OnOpenRecentFile)
当用户激活一个菜单项目时,Windows向应用发送一个WM_INITMENU消息,MFC向菜单中的所有项目发送ON_UPDATE_COMMAND_UI消息,而ID_FILE_MRU_FILE1的处理函数是OnUpdateRecentFileMenu,因此被调用。下面是该函数的实现:
void CWinApp::OnUpdateRecentFileMenu(CCmdUI* pCmdUI)
{
ASSERT_VALID(this);
if (m_pRecentFileList == NULL) // no MRU files
pCmdUI->Enable(FALSE);
else
m_pRecentFileList->UpdateMenu(pCmdUI);
}
|
|