Закрепление производного окна CControlBar

Как прикрепить производное окно CControlBar к середине окна-разделителя (CSplitterWnd)? Я хотел бы, чтобы полоса перемещалась всякий раз, когда сплиттер перемещается.

Чтобы было немного понятнее, что мне нужно, представьте себе вертикальную линейку в редакторе диалоговых окон в Visual Studio (только MFC). Он перемещается всякий раз, когда изменяется размер древовидного представления.


person Alf Zimmerman    schedule 02.10.2008    source источник


Ответы (2)


Альф,

В случае VS сплиттер не используется: представление ресурсов представляет собой панель управления с изменяемым размером (она выглядит и ощущается как сплиттер, но это не CSplitterWnd). Остальное — дочерний фрейм (либо с вкладками, либо с MDI. Перейдите в «Инструменты/Параметры/Среда/Общие» и выберите «Несколько документов», чтобы убедиться в этом). Линейка является частью (панелью управления?) дочернего фрейма.

В вашем случае, я думаю, вам не нужен разделитель на 3 панели. Вам нужен разделитель на 2 панели, и панель управления должна быть частью вашего представления (это не будет CControlBar как таковой). Если вы не используете MDI, в этом случае вы можете сделать его настоящей панелью управления в своем дочернем фрейме.

ХТН

person Serge Wautier    schedule 10.10.2008

Сергей, прошу прощения, не очень понятно выразился. Разделитель будет между представлением ресурсов и линейкой. Это будет выглядеть так:

Просмотр ресурсов | Вертикальная линейка | Вид

В любом случае, я нашел (теперь очевидный) ответ: разделить основной фрейм на три окна:

m_wndSplitter.CreateStatic(this, 1, 3);

m_wndLeftPane.Create(&m_wndSplitter,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0, 0));
m_ruler.Create(&m_wndSplitter,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0, 1));

m_wndSplitter.CreateView(0, 2, pContext->m_pNewViewClass, CSize(300, 0), pContext);
SetActiveView((CScrollView*)m_wndSplitter.GetDlgItem(m_wndSplitter.IdFromRowCol(0, 2)));
person Alf Zimmerman    schedule 03.10.2008