2009-05-27 8 views
1

사용자가 내 MFC 응용 프로그램의 파일 메뉴에 표시된 최근 파일 수를 편집 할 수있게하고 싶습니다.총 최근 파일 수 변경

그것은 삭제하고 CWinApp::m_pRecentFileList에 저장된 CRecentFileList 개체를 다시 포함 : 나는이 아주 좋은 참조를 사용했습니다. 죄송 합니다만 CRecentFileList을 교체하면 메뉴가 제대로 업데이트되지 않습니다. 아래의 코드를 참조하십시오

void CMyWinApp::SetMRUListSize(int size) 
{ 
    // size guaranteed to be between 1 and 16 
    delete m_pRecentFileList ; 
    LoadStdProfileSettings(size) ; 
} 

내가 파일 메뉴에 그려진 내가 개체를 다시 후 m_pRecentFileList와 동기화되어 있는지 확인하기 위해 무엇을 할 수 있는가?

+0

도움이 될지 모르겠지만 MFC RecentFileList 및 LoadStdProfileSettings 호출 전에 함수 SetRegistryKey를 호출해야하는 Windows 7에서 문제가 발생했습니다 (내 대답 http : // stackoverflow 참조).com/questions/1921231/maintain-a-recent-files-list/1922749 # 1922749). 이것이 당신의 문제와 관련이 있는지 확실하지 않습니다. – n1ckp

답변

0

Some of Microsoft's documentationCWinApp::LoadStdProfileSettingsInitInstance에서 가져와야한다고 제안합니다. 이것은 나에게 그것이 실행 시간이 아니라 초기화 과정에서 한 번 수행 된 것이라고 제안합니다.

두 링크 중 두 번째 링크를 완전히 구현해 보셨습니까? 내 생각 엔 당신이 CWinApp::LoadStdProfileSettings에 전화 대신 두 번째 부분을 추가 할 필요가 있습니다 : CRecentFileList Class

m_pRecentFileList = new CRecentFileList(0, strSection, strEntryFormat, nCount); 
if(m_pRecentFileList) 
{ 
    bReturn = TRUE; 

    // Reload list of MRU files from registry 
    m_pRecentFileList->ReadList(); 
} 

[편집] 분명히 m_pRecentFileList 점. CRecentFileList::UpdateMenu에 전화를 걸어 보셨습니까?

another CodeProject example which might help도 있습니다.

+0

맞을 수도 있습니다 - 코드를 적절하게 변경했지만 프로그래밍 방식으로 최근 파일 수를 변경 한 후에도 메뉴가 올바르게 업데이트되지 않습니다. 특히 최근에 표시된 파일의 수를 줄이더라도 표시된 최근 파일의 총 수는 줄어들지 않습니다. – swongu

2

내 CApp는 CWinApp에서 파생됩니다. 있는 InitInstance,이 라인이 : m_pmf 내 메인 프레임 클래스 다음

m_pmf->m_pRecentFileList = m_pRecentFileList; 

나는 멤버 형 CRecentFileList의를 CMainFrame :: m_pRecentFileList을 만들어 :의 InitInstance의 끝에서

LoadStdProfileSettings(10); 

을,이 코드를 추가 MFC 소스 파일 filelist.cpp에 있습니다. 오른쪽의 m_pRecentFileList는 보호되어 있으며 CMainFrame은 InitInstance 외부에서 액세스 할 수 없지만 여기에서 기능적 복사본을 만들 수 있습니다. 출구에

  m_pRecentFileList->WriteList(); 

// 강제 레지스트리 업데이트 :있는 CMainFrame ::으로 onClose의 끝에서

는에 의해 레지스트리 업데이트를 강제로. 강제하지 않으면 작동하지 않습니다.

MRU 메커니즘이 m_pRecentFileList를 올바르게 다시 빌드 할 필요가 없어도 올바르게 업데이트합니다. 예 : 5 개의 MRU 항목. 첫 번째 항목이 다른 디렉토리로 이동되어 더 이상 찾을 수 없습니다. 디버거에서 코드를 실행하면 잘못된 항목이 목록에서 제거 된 것으로 나타납니다. 어떤 이유로 위의 설명대로 강제 업데이트하지 않으면 업데이트 된 목록이 올바르게 저장되지 않습니다. 원래이 문제는 권한 (64 비트 Win7)과 관련이 있다고 생각했지만 관리자로 앱을 실행해도 도움이되지 않았습니다.

관련 문제