MFC: Создание горизонтально или вертикально ориентированной пользовательской панели инструментов на основе CControlBar

стремясь к вертикально ориентированной CControlBar-производная пользовательская панель инструментов. Предположительно, нет результатов, поскольку он всегда горизонтальный или всегда вертикальный, или я на самом деле не знаю — слишком много параметров для синхронизации, я боюсь!

Вот что у меня так далеко:

// creating the CControlBar-derived toolbar
CMyCB cb; // CControlBar-derived toolbar
cb.Create(  AfxRegisterWndClass(0),
NULL,
WS_CHILD | WS_VISIBLE ,
CRect(0,0,100,100),
AfxGetMainWnd(),
0
);
cb.SetBarStyle( cb.GetBarStyle() | CBRS_LEFT | CBRS_SIZE_DYNAMIC | CBRS_GRIPPER );
cb.EnableDocking( CBRS_ORIENT_HORZ );

// in CFrameWnd-derived window constructor
this->EnableDocking( CBRS_ALIGN_ANY );
this->FloatControlBar( &cb, CPoint(100,100), CBRS_ALIGN_LEFT );
this->ShowControlBar( &cb, TRUE, FALSE );

Наблюдая, как CControlBar :: CalcFixedLayout (переопределено в CMyCB) вызывается путем установки точки останова, я вижу, что это bHorz аргумент (сообщая, центибар горизонтальная или вертикальная панель инструментов) принимает «2» для первого вызова и «0» для самого последующего второго вызова.

Что я могу из этого сделать вывод? Есть ли способ, как создать пользовательскую панель инструментов, которая будет горизонтально или постоянно вертикально? (по крайней мере, что касается bHorz аргумент) Пожалуйста, смотрите параметры CBRS_ * в приведенном фрагменте. Большое спасибо.

Tomas

0

Решение

Я никогда не получал панель инструментов для выравнивания ее влево и вправо только с настройками вызова CreateEx. Нет проблем с панелями. Даже отладка до глубины кода MFC не показала мне причину.

Так что вот мое простое решение.

m_wndHorzBar — это имя панели, которую вы хотите выровнять по левому краю. Я просто использовал мастер для создания примера кода, и я ожидаю, что у вас есть обычная панель инструментов и меню, чтобы вы могли видеть контекст.

// Create it (just for simplicity no error checking)
// CBR_LEFT seamed to be ignored
m_wndHorzBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_LEFT | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

...

// Allow the normal bars to align anywhere
m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
// this bar should be aligned only in the left docking area
m_wndHorzBar.EnableDocking(CBRS_ALIGN_LEFT);

// Perform the initial docking
EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndMenuBar);
DockPane(&m_wndToolBar);
DockPane(&m_wndHorzBar);

// Now allow the bar to be docked anywhere by the user
m_wndHorzBar.EnableDocking(CBRS_ALIGN_ANY);
0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector