Как расположить свою панель инструментов справа от 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 don't want the toolbar to
// be dockable

m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar1);
После компиляции созданная панель инструментов будет находиться под стандартной.


Для более удобного расположения панели применим функцию 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);
}

 

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

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

 



Сайт создан в системе uCoz