FAQ:WinAPI VCPP:программно выравнять CDialogBar — различия между версиями
Материал из Весельчак У
RXL (обсуждение | вклад) (Ветвление.) |
(нет различий)
|
Версия 10:53, 29 июля 2008
Как программно расположить один CDialogBar под другим при их вертикальном расположении?
В обработчике CMainFrame::OnCreate, пишем:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_dlgBar1.Create(this, IDD_DIALOG1, CBRS_LEFT|CBRS_TOOLTIPS|CBRS_FLYBY, IDD_DIALOG1))
{
TRACE0("Failed to create dlgbar1\n");
return -1; // fail to create
}
if (!m_dlgBar2.Create(this, IDD_DIALOG2, CBRS_LEFT|CBRS_TOOLTIPS|CBRS_FLYBY, IDD_DIALOG2))
{
TRACE0("Failed to create dlgbar1\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators) / sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
EnableDocking(CBRS_ALIGN_ANY);
// докинг верхнего тулбара
DockControlBar(&m_wndToolBarTop);
// пересчёт размеров фрейма
RecalcLayout();
CRect rect;
DWORD dw;
UINT n;
// достаём прямоугольник верхнего тулбара
m_wndToolBarTop.GetWindowRect(&rect);
// смещаем прямоугольник на пиксел вниз, тем самым заставим
// нижний тулбар разместиться ниже (см ниже DockControlBar())
rect.OffsetRect(0, 1);
// определяем по стилю фрейма, где расположен верхний тулбар
// и определяем стиль нижнего тулбара
dw=m_wndToolBarTop.GetBarStyle();
n = 0;
if (dw & CBRS_ALIGN_TOP)
n = AFX_IDW_DOCKBAR_TOP;
else if (dw & CBRS_ALIGN_BOTTOM)
n = AFX_IDW_DOCKBAR_BOTTOM;
else if (dw & CBRS_ALIGN_LEFT)
n = AFX_IDW_DOCKBAR_LEFT;
else if (dw & CBRS_ALIGN_RIGHT)
n = AFX_IDW_DOCKBAR_RIGHT;
// докинг нижнего тулбара (поскольку было rect.OffsetRect(0, 1),
// m_wndToolBarBottom будет расположен ниже m_wndToolBarTop)
DockControlBar(&m_wndToolBarBottom, n, &rect);
return 0;
}