2013-05-14 4 views
3

MFC의 기본 제공 window/dock 상태 저장 위치를 ​​사용하고 싶지 않은 프로젝트에서 작업하고 있습니다. 이것은 내 메인 프레임에 EnableLoadDockState(FALSE)을 설정한다는 것을 의미합니다. 내가 그것을 진실로 되돌리기를 바랄만큼 나는 할 수 없다.MFC CDockablePane이 도킹 된 도킹 영역 얻기

CDockablePane이 도킹 된 위치를 onAfterDock() (내 CDockablePane)으로 지정할 계획입니다. 내 문제는 그것이 측면, 상단 또는 하단, 다른 CDockablePane에 배치되었는지 여부를 얻는 방법에 대해서는 잘 모릅니다.

이 정보를 얻을 방법이 있습니까?

감사합니다.

답변

3

나는 그것을 얻을 수있는 방법이 있다고 생각하지만, 쉽지는 않을 것입니다.

OnAfterDock을 걸러 내면 떠 다니는 창에 관심이없는 것 같습니다. 그래서, 도킹 창을 위해, 당신은 사용할 수 있습니다 반환 CDockablePane::GetDefaultPaneDivider (MSDN here) - MSDN 말한대로 :

고정 가능한 창은 메인 프레임 윈도우에 결합, 또는 NULL 경우 유효한 CPaneDivider 객체가 고정 가능한 창 인 경우 도킹되지 않았거나 떠있는 경우.

(MSDN here)

는 ... 두 개의 창을 나누는 CPaneDivider 목적은 패널의 두 그룹으로 분할 또는 메인 프레임 윈도우의 클라이언트 영역에서 패널의 그룹을 구분

다음 부분 스크린 샷 더 말한다 :

cpanedivider

디바이더가 수평 또는 수직 등의 경우

그래서, 일반 구역 분할을 위해, 당신은 다른 창 또는 다른 내장 CPaneDivider (여기에 필요하므로 재귀 심문)를 찾아 확인 CPaneDivider의 방법을 사용할 수를 사용할 수 있습니다

상기 한 바와 다른 경우를 들어, (다시 as MSDN says)을 CPaneContainerManager 클래스,

봐 ... 당신은 여기에서 현재의 도킹 레이아웃

의 저장 및 디스플레이를 관리 원래 도킹 된 창에서 시작하는 전체 도킹 계층을 다시 드릴 다운 할 수 있습니다.

내가 너라면 EnableLoadDockState을 사용하거나 적어도 다시 MFC 소스 코드를 검색하여 재사용 할 수있는 내부 도우미 클래스/기능이 있는지 살펴볼 것입니다.

+0

고마워요! 나는 그것을 조사 할 것이다.EnableLoadDockState가 false로 설정되었다는 것을 정말 싫어합니다. 2 개가 고정되어있을 때 탭 첨부 도킹 탭을 올바르게 만들 수 없습니다. 나는 어떤 진전이있을 때 이것을 업데이트 할 것입니다. – Detox

+0

그것을 작동 시키려고 노력한 후에, 나는 어느 정도 포기했다. 파생 된 cDockablePane 클래스의 잔재를 수정하여 도크 크기와 창 크기 및 위치를 얻을 수 있었지만 도킹 위치가 CDockingManager에 저장되고 필요한 특성이 보호되므로 저장하기가 너무 어렵고 복잡했습니다. – Detox

3

방금이 문제를 해결했습니다. CBRS_ALIGN_LEFT, CBRS_ALIGN_RIGHT 등의 경우 CDockablePanedwStyle (GetPaneStyle())을 확인할 수 있습니다. 복잡한 방법은 없습니다. 단순한.

+0

도킹 될 때 스타일이 동적으로 변경됩니까? 또한, 이것은 도킹 된 객체를 찾는데 도움이되지 않습니다. AIUI는 OP 문제의 일부였습니다. –

+1

@RogerRowland 예, 스타일이 동적으로 변경됩니다. 그리고 당신 말이 맞습니다. 마지막으로 EnableLoadDockState (TRUE)로 전환했습니다. 도킹 관리자 객체 내에서'protected' 코드를 발견하고 그것을 호출하기 위해 해킹을했습니다. 그러나 몇 분 후에 나는 포기했다. 죄송합니다. 어쩌면 당신은 자신의 도킹 매니저 해킹 클래스에 그 코드를 복사 할 수 있습니다. –

관련 문제