Adding Most Recently Used (MRU) Files to an SDI/MDI Application

转载 2007年10月09日 10:19:00

转自:http://www.codeproject.com/docview/most_recent_used.asp
<H2>Introduction</H2>
<P>The Most Recently Used (MRU) files list is standard feature of most Windows
applications. This article describes how to add (MRU) support to Windows
(SDI/MDI) application using the class <CODE>CRecentFileList</CODE>.
<CODE>CRecentFileList </CODE>is a <CODE>CObject </CODE>class that supports
control of the most recently used (MRU) file list. Files can be added to or
deleted from the MRU file list, the file list can be read from or written to the
registry or an .INI file, and the menu displaying the MRU file list can be
updated.
<H2>Using the code</H2>
<P>Adding MRU to MFC SDI or MDI is actually not very difficult. I just add
<CODE>AddToRecentFileList</CODE>(<CODE>LPCTSTR lpszPathName</CODE>) to
<CODE>CDocument </CODE>derived class which calls the add the path name to
<CODE>CWinApp</CODE>'s <CODE>CRecentFileList
</CODE>(m_<CODE>pRecentFileList</CODE>). I use SDI for this demo.
<P>1. Iinclude afxadv.h to stdafx.h. This contains the class
<CODE>CRecentFileList</CODE>.</P><PRE>#include <afxadv.h></PRE>
<P>2. Add <CODE>AddToRecentFileList</CODE> to <CODE>CDocument</CODE> derived
class and use this function during opening and saving the document.</P><PRE>void CCMRUTestDoc::AddToRecentFileList(LPCTSTR lpszPathName)
{
    ((CCMRUTestApp*)AfxGetApp())->AddToRecentFileList(lpszPathName);
}

BOOL CCMRUTestDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
    if (!CDocument::OnOpenDocument(lpszPathName))
        return FALSE;
   
    // Add to MRU file list
    AddToRecentFileList(lpszPathName);
   
    return TRUE;
}

BOOL CCMRUTestDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
    // Add to MRU file list
    AddToRecentFileList(lpszPathName);
   
    return CDocument::OnSaveDocument(lpszPathName);
}
</PRE>
<P>3 Add <CODE>AddToRecentFileList</CODE> for <CODE>CWinApp</CODE> derived
class.</P><PRE>void CCMRUTestApp::AddToRecentFileList(LPCTSTR lpszPathName)
{
    // lpszPathName will be added to the top of the MRU list.
    // If lpszPathName already exists in the MRU list, it will be moved to the top
    if (m_pRecentFileList != NULL)    {
        m_pRecentFileList->Add(lpszPathName);
    }

To enable action on MRU you must add the following code. The ID_FILE_MRU_FILE1..ID_FILE_MRU_FILEx are actually the menu ids of the MRU's:

On MainFrm.cpp

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_COMMAND_RANGE(ID_FILE_MRU_FILE1, ID_FILE_MRU_FILE4, OnFileMruFile)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
...

void CMainFrame::OnFileMruFile(UINT nID)
{
int nMRUIndex = -1;
switch (nID) {
case ID_FILE_MRU_FILE1:
nMRUIndex = 0;
break;
case ID_FILE_MRU_FILE2:
nMRUIndex = 1;
break;
case ID_FILE_MRU_FILE3:
nMRUIndex = 2;
break;
case ID_FILE_MRU_FILE4:
nMRUIndex = 3;
break;
}

((CCMRUTestApp*)AfxGetApp())->OpenRecentFileList(nMRUIndex);

}

On CMRUTest

void CCMRUTestApp::OpenRecentFileList(int nIndex)
{
if (m_pRecentFileList != NULL) {
CString strFilename;

if (m_pRecentFileList->GetDisplayName(strFilename,
nIndex,
_T("."),
1))
AfxMessageBox(strFilename);
}
}
You must add code to determine the current directory and replece the _T(".") with its value


}
</PRE> 

MFC MDI和SDI美化----之客户区美化

1、美化方式:贴图,重绘背景 2、一、MDI客户窗口   一个MDI应用的主框架窗口包含一个特殊的子窗口称为MDICLIENT窗口。MDICLIENT窗口负责管理主框架窗口的客户区。MDICLIE...
  • wzy198852
  • wzy198852
  • 2014年02月12日 09:53
  • 3039

MFC MDI和SDI非客户区框架界面美化之----界面全面美化

VS2008以上的开发平台,微软提供了“视觉管理器和样式”这么一个概念,我们可以通过继承视觉管理器提供的样式进行美化界面,包括MDI框架等。也可以实现构造自己的皮肤界面库,从而避免无休止的重绘、刷新界...
  • wzy198852
  • wzy198852
  • 2014年02月12日 10:49
  • 8979

Maven用仓库外的jar进行编译

http://blog.csdn.net/zhouysh/article/details/5713532   之所以采用Maven调用ant 进行编译,是因为有一些lib 并不在远程仓库里,而是直...
  • caolaosanahnu
  • caolaosanahnu
  • 2013年01月31日 17:11
  • 2539

Add Most Recently Used Files (MRU) List to Windows Applications(在桌面应用程序中添加最近访问文件列表)

原文地址链接: http://www.codeproject.com/Articles/407513/Add-Most-Recently-Used-Files-MRU-List-to-Windows...
  • EYUANatQQdotCOM
  • EYUANatQQdotCOM
  • 2012年06月26日 12:34
  • 918

添加react到已存在的项目中(Adding React to an Existing Application)-1

将react功能添加到已有的项目中去,不必担心要重构你的项目。 你只需要按以下步骤: 如果你的项目中没有package.json文件则在项目根目录敲:npm init,初始化一个配置文件,如果有则跳...
  • starryninglong
  • starryninglong
  • 2017年03月22日 19:58
  • 346

Adding React to an Existing Application

https://facebook.github.io/react/docs/installation.html 开始使用React,你不要重写你的应用,我们推荐在你的应用中增加一小部分。比如一个小...
  • monica12
  • monica12
  • 2017年07月27日 12:39
  • 93

Preparing for Application and Service Deployment-Adding an HTTPS Endpoint to a Windows Azure Cloud

http://blogs.msdn.com/b/jnak/archive/2009/05/12/https-endpoint-on-windows-azure.aspx [Update: W...
  • riverlau
  • riverlau
  • 2012年01月02日 06:35
  • 255

(gedit:1962): Gtk-WARNING **: Attempting to store changes into `/root/.local/share/recently-used.xbe

解决方案: 使用 sudo mkdir -p /root/.local/share/命令创建目录: /root/.local/share 这两天捣腾Ubuntu11.10的时候,...
  • walkerJong
  • walkerJong
  • 2012年03月16日 20:57
  • 2115

MFC如何构建和提供打印和打印预览到你的SDI和MDI程序中去An arti

  • 2006年02月23日 09:05
  • 16KB
  • 下载

How are the icon files in my application bundle used on iPad and iPhone

iPhone-only Apps Include the following in your application's Resources group in the Xcode project...
  • love12chen
  • love12chen
  • 2011年11月23日 08:47
  • 565
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Adding Most Recently Used (MRU) Files to an SDI/MDI Application
举报原因:
原因补充:

(最多只允许输入30个字)