FAQ:WinAPI VCPP:программно выравнять CDialogBar — различия между версиями

Материал из Весельчак У
Перейти к: навигация, поиск
(Ветвление.)
 
 
(не показана одна промежуточная версия этого же участника)
Строка 3: Строка 3:
 
В обработчике CMainFrame::OnCreate, пишем:
 
В обработчике CMainFrame::OnCreate, пишем:
  
<pre>
+
<syntaxhighlight lang="cpp">
 
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
 
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
 
{
 
{
Строка 66: Строка 66:
 
return 0;
 
return 0;
 
}
 
}
</pre>
+
</syntaxhighlight>
  
[[Category:FAQ:WinAPI VCPP]]
+
[[Category:FAQ:WinAPI VCPP]] [[Category:FAQ:MFC]]

Текущая версия на 22:09, 3 октября 2009

Как программно расположить один 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;
}