ReBar and ToolBar
От: Yuri Россия http://spbdetails.ru
Дата: 31.10.01 16:17
Оценка:
Привет всем!
Создаю ReBar, затем 3 ToolBar'а, добавляю ToolBar'ы на ReBar, но первый тулбар располагается в ребаре слева, как надо, а два других сносит вправо, причем информация о их положении не сохраняется, несмотря на то, что я при выходе делаю SaveBarState(_T("BarState"));. В чем проблема?
С уважением, Yuri
Take it easy.
Re: ReBar and ToolBar
От: Blackheel Россия  
Дата: 01.11.01 10:07
Оценка:
Здравствуйте Yuri, Вы писали:

Y>Привет всем!

Y>Создаю ReBar, затем 3 ToolBar'а, добавляю ToolBar'ы на ReBar, но первый тулбар располагается в ребаре слева, как надо, а два других сносит вправо, причем информация о их положении не сохраняется, несмотря на то, что я при выходе делаю SaveBarState(_T("BarState"));. В чем проблема?
Y>С уважением, Yuri



Вот, кажется, я это брал на www.codeguru.com.

void CMainFrame::DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf)
{
CRect rect;
DWORD dw;
UINT n;

// get MFC to adjust the dimensions of all docked ToolBars
// so that GetWindowRect will be accurate
RecalcLayout(TRUE);

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;

// When we take the default parameters on rect, DockControlBar will dock
// each Toolbar on a seperate line. By calculating a rectangle, we
// are simulating a Toolbar being dragged to that location and docked.
DockControlBar(Bar,n,&rect);
}

Yegor A. Blackheel
Re: ReBar and ToolBar
От: Y82_lexus Россия  
Дата: 23.01.07 13:22
Оценка:
Здравствуйте, Yuri, Вы писали:

Y>Привет всем!

Y>Создаю ReBar, затем 3 ToolBar'а, добавляю ToolBar'ы на ReBar, но первый тулбар располагается в ребаре слева, как надо, а два других сносит вправо, причем информация о их положении не сохраняется, несмотря на то, что я при выходе делаю SaveBarState(_T("BarState"));. В чем проблема?
Y>С уважением, Yuri

Функция, равняющая окна в rebar'е (для горизонтального)
void CMainFrame::ArrangeRebarBands(CReBarCtrl* pRebar)
{
//Band information
REBARBANDINFO bandinfo;
bandinfo.cbSize = sizeof(REBARBANDINFO);
bandinfo.fMask = RBBIM_CHILD;
//First band in line
bool bFirstInLine = true;
RecalcLayout();
UINT nCount = pRebar->GetBandCount();
for (UINT i=0; i<nCount — 1; i++)
{
CRect rectCur, rectNext;
//Get current band wnd
if (!pRebar->GetBandInfo(i, &bandinfo)) break;
CWnd* pWnd = FromHandle(bandinfo.hwndChild);
if (!pWnd) break;
pWnd->GetWindowRect(&rectCur);
//Get next band wnd
if (!pRebar->GetBandInfo(i + 1, &bandinfo)) break;
pWnd = FromHandle(bandinfo.hwndChild);
if (!pWnd) break;
pWnd->GetWindowRect(&rectNext);

//Is bands in one line?
if ((rectCur.bottom <= rectNext.top) || (rectCur.top >= rectNext.bottom))
{
//different lines
if (bFirstInLine)
pRebar->MinimizeBand(i);
else
pRebar->MaximizeBand(i);
bFirstInLine = true;
}
else
{
//same line
pRebar->MinimizeBand(i);
bFirstInLine = false;
}
}
if (bFirstInLine)
pRebar->MinimizeBand(nCount-1);
else
pRebar->MaximizeBand(nCount-1);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.