65.9K
CodeProject 正在变化。 阅读更多。
Home

适用于文档/视图架构的附加组合 MRU

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.29/5 (6投票s)

2003年5月2日

viewsIcon

45145

downloadIcon

612

在文档表单视图的组合框中反映的文档/视图 MRU

引言

有一天,我需要创建一个SDI应用程序,该应用程序需要在文档表单视图的组合框中实现MRU功能。我不是高级VC程序员,所以我不假装这是最好的解决方案。这篇文章是为那些搜索此类示例的初学者准备的。

需要完成什么?

使用VC向导创建一个普通的SDI应用程序。对于我的项目,我指定了MRU大小为5。

使用类向导覆盖应用程序对象(派生自CWinApp)的默认OnCmdMsg消息分派器。在我的示例中,应用程序对象是CTestFormApp

BOOL CTestFormApp::OnCmdMsg(UINT nID, int nCode, 
    void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
{
 BOOL temp = CWinApp::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);

 if (nID >= ID_FILE_MRU_FILE1 && nID <= ID_FILE_MRU_FILE1 + 4) 
 if (nCode == CN_COMMAND) UpdateComboMRU();

 return temp;

} 

UpdateComboMRU的实现如下所示

#include "afxpriv.h"    // needed because there is a forward class 
    //declaration of CRecentFileList

CTestFormApp::UpdateComboMRU()
{ 
  CComboBox & combo=((CTestFormView*)(
    (CFrameWnd*)m_pMainWnd)->GetActiveView())->m_ComboMRU;
  CString x;
  combo.ResetContent();
  for (int i = 0; i < m_pRecentFileList->m_nSize; i++)
  { if (!m_pRecentFileList->GetDisplayName(x, i, NULL, NULL))
   break;
  combo.AddString(x); // update the combo from MRU object
  }
  combo.SetCurSel(0);  // select first MRU file
}

CTestFormView是我的文档视图类,而m_ComboMRU是在视图中显示的CComboBox对象。

为了使事情顺利进行,需要以下调用

((CTestFormApp*)AfxGetApp())->UpdateComboMRU();

from

  • 表单视图OnInitialUpdate
  • 文档OnOpenDocument
  • 文档DoSave

就像这样

void CTestFormView::OnInitialUpdate()
{
 CFormView::OnInitialUpdate();
 ((CTestFormApp*)AfxGetApp())->UpdateComboMRU();
 GetParentFrame()->RecalcLayout();
 ResizeParentToFit();
}
BOOL CTestFormDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
 if (!CDocument::OnOpenDocument(lpszPathName))
  return FALSE;
 
 ((CTestFormApp*)AfxGetApp())->UpdateComboMRU();
 
 return TRUE;
}
BOOL CTestFormDoc::DoSave(LPCTSTR lpszPathName, BOOL bReplace)
{
 BOOL temp = CDocument::DoSave(lpszPathName, bReplace);
 ((CTestFormApp*)AfxGetApp())->UpdateComboMRU();
 return temp;
}

你需要覆盖DoSave。该网站上有一篇关于此的文章

© . All rights reserved.