2012-10-25 4 views
6

Visual Studio 2010을 사용하고 MFC SDI 응용 프로그램으로 작업합니다. 메인 프레임 소유의 CMFCToolbar 개체가 있습니다.CMFCToolbar ReplaceButton()이 단추를 사라지게합니다.

이 응용 프로그램의 문서를 만들면 MainFrame에서 CMFCToolbar 객체의 버튼 중 하나를 CMFCToolbarMenuButton으로 바꾸는 함수를 호출합니다. 메뉴 버튼의 내용은 문서의 정보로 채워집니다. 메뉴 생성은 항상 작동합니다. ReplaceButton 호출은 항상 성공합니다. 그러나 아직 알아 내지 못한 시각적 증상이 있습니다.

ReplaceButton이 호출 될 때마다 단추가 사라집니다. 그릴 수 없으며 클릭 할 수 없습니다. 일시적으로 사라졌습니다. ReplaceButton에 대한 호출로 방금 파괴 한 이전 버튼에 매달린 참조가 있기 때문에 이것이라고 가정합니다.

Invalidate(), RecalcLayout()을 호출하여 다시 그리기를 시도했지만 어느 것도 아직 작동하지 않았습니다. 유일한 방법은 단추를 표시하는 방법은 응용 프로그램 창 크기를 수동으로 변경하거나 도구 모음을 도킹 해제/다시 고정하는 것입니다. 이 상황에서 발생하는 더 낮은 수준의 새로 고침이 있다고 가정하지만 수동으로 트리거하는 방법을 모르겠습니다.

내 버튼이 바로 그려지는 방법이 있습니까?

편집 : 코드 샘플

Count = m_Doc->...->GetCount(); 
for (Index = 0; Index < Count; ++Index) 
{ 
    Caption.Format(L"%s", m_Doc->...->GetName()); 
     m_pLayerMenu->AppendMenu(MF_ENABLED | MF_STRING, LAYER_DROP_SEED+Index, Caption.GetData()); 
} 
m_wndBrushBar.ReplaceButton(ID_BRUSH_TERRAIN, 
    CMFCToolBarMenuButton(ID_BRUSH_TERRAIN, *m_pLayerMenu, GetCmdMgr()->GetCmdImage(ID_BRUSH_TERRAIN))); 

업데이트 :

m_wndBrushBar.AdjustLayout()이 CMFCToolbar 버튼의 시각적 동작을 안정 것으로 보인다 호출. 이것이 부분적인 해결책입니다. 다음으로 인해 부분적으로 표시됩니다.

실제 시각적 인 동작이 무엇인지 알기가 어렵습니다. 모든 시각적 설정/상태는 이러한 MFC 개체를 사용하여 레지스트리에 저장되며 실제로 앱의 시작 동작을 변경하는 동적으로 생성 된 개체의 상태를 유지할 수 있습니다.

나는

Current User -> "Local App-Wizard Generated Applications" -> [My App Name] 아래의 레지스트리 값을 삭제하려면 갔어요. 이 작업을 여러 번 수행하여 내 앱의 실제 동작을 확인합니다. 현재 버전의 MFC에 대한 기본적인 지식이 부족한 것 같습니다. 레지스트리 거래에서 발생하는 버그가 많습니다.

특정 개체에 대한 레지스트리 설정을 방지하거나이 동작을 완전히 차단하는 방법이 있습니까? 그렇지 않으면 내 종료 프로세스가 훨씬 더 철저하게 모든 시각적 요소를 재설정해야 할 것 같아요. 레지스트리 값이 시작 코드를 무시, 무시 또는 무시하는 것 같습니다. 개체를 시작할 때 볼 수있는 방법을 코딩 할 수 있지만 레지스트리에 값이 있으면 좋지 않습니다.

+0

좋은 질문입니다. 관련성 높은 소스 코드를 추가 할 수 있습니까? – dpassage

답변

0

CMFC 코드에 대해 때때로 귀찮은 부분을 발견했습니다. 즉, 작업 공간의 개념입니다. 작업 영역은 응용 프로그램 상태의 개념을 관리합니다. 나는 또한 당신이 묘사하는 것과 같은 문제를 가지고있다. 그러나 LoadState() 및 SaveState() 메서드를 재정 의하여 이러한 개체를 다시 만드는 방법을 유연하게 관리 할 수 ​​있습니다.

관련 문제