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