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...
Пока на собственное сообщение не было ответов, его можно удалить.