2013-04-10 4 views
0

CMFCRibbonBar로 VC++ VS2010 메뉴 응용 프로그램을 대체했습니다. 이전 메뉴 구동 버전에서는 CRecentFileList에서 파생 된 자체 사용자 정의 클래스를 만들었습니다. UodateMenu 메서드를 오버라이드하여 최근 파일 목록에서 파일을 추가하고 삭제합니다. CMFCRibbonBar를 사용 했으므로 최근 파일 목록을 리본에 업데이트하는 데 문제가 있습니다. MRU 목록은 다른 파일을 열 때마다 제대로 업데이트되지만 리본의 최근 파일 목록은 그대로 유지됩니다. 응용 프로그램을 닫은 다음 다시 열면 최근 파일 목록이 제대로 업데이트됩니다. 어떤 도움이라도 대단히 감사하겠습니다. 고맙습니다.CMFCRibbonBar에서 최근 파일 목록을 업데이트하는 방법

답변

1

CRecentFileList에서 파생 된 클래스를 사용 했으므로 프로젝트에서 WINVER 정의를 변경 한 경우 MFC가 호출되는 방식에 영향을 미칠 수 있습니다.

리본 막대는 파일/열기 및 파일/저장 명령을 MFC 프레임 워크를 통해 라우팅하는 것 이상을 수행하지 않으며 각각의 경우에 CWinApp::AddToRecentFileList()의 어떤 지점에서 끝납니다.

다음과 같이 이제 MFC (예 : VS2008)의 이전 버전에서,이 함수는 정의 :

void CWinApp::AddToRecentFileList(LPCTSTR lpszPathName) 
{ 
    ASSERT_VALID(this); 
    ENSURE_ARG(lpszPathName != NULL); 
    ASSERT(AfxIsValidString(lpszPathName)); 

    if (m_pRecentFileList != NULL) 
     m_pRecentFileList->Add(lpszPathName); 
} 

그러나, VS2010 (나는 생각한다)에서 이후 - 확실히 VS2012에서 - 그 함수는 이제 다음과 같습니다 :

void CWinApp::AddToRecentFileList(LPCTSTR lpszPathName) 
{ 
    ASSERT_VALID(this); 
    ENSURE_ARG(lpszPathName != NULL); 
    ASSERT(AfxIsValidString(lpszPathName)); 

    if (m_pRecentFileList != NULL) 
    { 
#if (WINVER >= 0x0601) 
     m_pRecentFileList->Add(lpszPathName, m_pszAppID); 
#else 
     m_pRecentFileList->Add(lpszPathName); 
#endif 
    } 
} 

당신은 당신의 파생 클래스의 논리에 영향을 미칠 수 CRecentFileList::Add()의 새로운 과부하가 있음을 알 수있다. 디버거로 새 코드를 실행하면 Windows 7 셸 API 호출을 사용하여 최근 문서를 점프 목록에 추가하는 것이 가능하다는 것을 알 수 있습니다.이 작업은 어쨌든 할 수 있습니다.

어쨌든 응용 프로그램을 다시로드하면 업데이트 된 목록이 올바르게 표시된다는 것을 알았 기 때문에 변경된 후에 목록을 직접 다시로드해야한다고 생각합니다. 다음과 같이이 작업을 수행하려면 CWinApp::AddToRecentFileList()을 대체 할 수 있습니다 : 그 도움이된다면

void CYourApp::AddToRecentFileList(LPCTSTR lpszPathName) 
{ 
    CWinApp::AddToRecentFileList(lpszPathName); 
    m_pRecentFileList->ReadList(); 
} 

을 참조하십시오.