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에 대한 기본적인 지식이 부족한 것 같습니다. 레지스트리 거래에서 발생하는 버그가 많습니다.
특정 개체에 대한 레지스트리 설정을 방지하거나이 동작을 완전히 차단하는 방법이 있습니까? 그렇지 않으면 내 종료 프로세스가 훨씬 더 철저하게 모든 시각적 요소를 재설정해야 할 것 같아요. 레지스트리 값이 시작 코드를 무시, 무시 또는 무시하는 것 같습니다. 개체를 시작할 때 볼 수있는 방법을 코딩 할 수 있지만 레지스트리에 값이 있으면 좋지 않습니다.
좋은 질문입니다. 관련성 높은 소스 코드를 추가 할 수 있습니까? – dpassage