FAQ:WinAPI VCPP:программно выравнять CDialogBar — различия между версиями
Материал из Весельчак У
RXL (обсуждение | вклад) (Ветвление.) |
RXL (обсуждение | вклад) м (→Как программно расположить один CDialogBar под другим при их вертикальном расположении?) |
||
Строка 3: | Строка 3: | ||
В обработчике CMainFrame::OnCreate, пишем: | В обработчике CMainFrame::OnCreate, пишем: | ||
− | < | + | <syntaxhighlight lang="cpp"> |
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) | int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) | ||
{ | { | ||
Строка 66: | Строка 66: | ||
return 0; | return 0; | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
[[Category:FAQ:WinAPI VCPP]] | [[Category:FAQ:WinAPI VCPP]] |
Версия 01:08, 30 июля 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; }