VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 631|回复: 3

关于“最近开大的文件”的问题

[复制链接]

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-5 18:20:01 | 显示全部楼层 |阅读模式
我现在要把一个单文档程序里“文件”子菜单里的“最近文件”菜单项改成一个弹出菜单。然后显示最近的菜单。我看了一个参考书,但是我没看懂,麻烦高人给我讲解一下。书里是这么写的:

1)编辑菜单资源,把“文件”子菜单中的“最近文件”菜单项的属性改成popup,去掉grayed属性。然后在其下添加一个ID为ID_FILE_MRU_FILE1的菜单项。
   (以上步骤我都理解)
2)在应用程序类中添加命令ID_FILE_MRU_FILE1的UPDAATE_COMMAND_UI消息的响应函数,代码如下:
void CTestApp::OnUpdateFileMruFile1(CCmdUI *pCmdUI)
{
        if (pCmdUI->m_pSubMenu!=NULL)   //这句话什么意思?
        {
                return;
        }
        CWinApp::OnUpdateRecentFileMenu(pCmdUI);
          //CWinApp类没有OnUpdateRecentFileMenu()这个成员函数,那么这个

         //是什么函数?
}

这段代码本人真的不能理解,我刚入门,请各位高人不要见笑,并请耐心点给我解一下。if语句的判断究竟是什么意思?要判断什么?
回复

使用道具 举报

0

主题

12

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 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);

}
回复

使用道具 举报

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-1-6 03:06:01 | 显示全部楼层
楼上的我看不懂。水平太差。怎么办
回复

使用道具 举报

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-1-6 08:24:01 | 显示全部楼层
楼上的,OnUpdateRecentFileMenu()并不是CWinApp类的成员函数啊。它是什么函数
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表