Как расположить свою панель инструментов справа от ToolBar.

Возможно при разработке программ кто - то столкнётся с проблемой расположения нескольких toolbar - ов. Как правило последующие панели инструментов располагаются под предидущими, что само по себе не приносит эстетического наслаждения и функциональных удобств. Для того чтобы подчинить себе данный процесс применим функцию DockControlBar.
Берём исходник программы в которой уже созданна стандартная панель инструментов. Добавим к ней свою, назовём её например ToolBar1 Заведём ещё один класс инструментов в файле MainFrm.h:

CToolBar m_wndToolBar1;
В инициализации OnCreate в файле MainFrm.cpp используем индефикатор нашей панели и наш класс:

if (!m_wndToolBar1.CreateEx(this, TBSTYLE_FLAT,
WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

!m_wndToolBar1.LoadToolBar(IDR_TOOLBAR1))

{

TRACE0("Failed to create toolbar1\n");
return -1;
// fail to create

}

// TODO: Delete these three lines if you dont want the toolbar to

m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar1);

После компиляции созданная панель инструментов будет находиться под стандартной:
рис.1

Для более удобного расположения панели применим функцию DockControlBar. В заголовочном файле MainFrm.h внести следующие объявления:
// Implementation
public:
virtual ~CMainFrame();

void DockControlBarLeftOf(CToolBar* Bar,CToolBar* LeftOf);//это изменение

В файле MainFrm.cpp, инициализации OnCreate, внести следующие изменения:
// TODO: Delete these three lines if you
don’t want the toolbar to

// be dockable

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&m_wndToolBar1);
DockControlBarLeftOf(&m_wndToolBar1,&m_wndToolBar);
//новый код
return 0;
}

с этого места добавление
void CMainFrame::DockControlBarLeftOf(CToolBar* Bar,CToolBar* LeftOf)
{
CRect rect;
DWORD dw;
UINT n;

RecalcLayout();

LeftOf->GetWindowRect(&rect);
rect.OffsetRect(1,0);
dw=LeftOf->GetBarStyle();
n = 0;
n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;

n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM :
n;
n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;

DockControlBar(Bar,n,&rect);
}

Вот что должно получиться после компиляции:
рис.2

загрузить исходник

© Goodluck Дмитрий (Cema)

Похожие записи

В первые дни нового года…... После десяти дней нового года решил наконец-то выйти из дому :) Не то, что б я рьяно отмечал праздники. Просто погода не способствовала долгим прогулк...
Ошибка при запуске программы через Ctrl +F5... При запуске уже скомпилированного проекта через Ctrl + F5 столкнулся с тем что в папке Debug не оказаласось .exe файла. Интересно, подумал я и стал по...
WaveMaker Visual Assembly Studio and WaveMaker Rap... На сайте www.wavemaker.com сообщается о выходе двух новых продуктов: WaveMaker Visual Assembly Studio и WaveMaker Rapid Deployment Framework for Enter...
Глава 2 Привет мир! «Bahasa Indonesia Book on wxWidgets» Noprianto, перевёл Дмитрий Goodluck(Cema) Оглавление Глава 2. Привет мир! 2.1 Структура каталогов приложен...

Comment ( 1 )

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Страницы

Метки

Рубрики

Свежие записи

Свежие комментарии

Октябрь 2018
Пн Вт Ср Чт Пт Сб Вс
« Апр    
1234567
891011121314
15161718192021
22232425262728
293031  

Архивы