Про CDialogBar
От: edikk www.ed.kaliningrad.ru
Дата: 18.01.02 14:16
Оценка:
Есть три созданных DialogBar-а, и при запуски MDI приложения они открываются. Но, они небольшие по размеру, и хотелось бы их расположить в ряд верткально в левой части окна (пример фотошоп, в правой части окна в ряд вертикально по умолчанию). А по умолчанию в той же левой части окна они распологаются горизонтально. Как сделать так как хочется?
Re: Про CDialogBar
От: Sasparella США  
Дата: 18.01.02 14:37
Оценка:
Здравствуйте edikk, Вы писали:

E>Есть три созданных DialogBar-а, и при запуски MDI приложения они открываются. Но, они небольшие по размеру, и хотелось бы их расположить в ряд верткально в левой части окна (пример фотошоп, в правой части окна в ряд вертикально по умолчанию). А по умолчанию в той же левой части окна они распологаются горизонтально. Как сделать так как хочется?



CFrameWnd::DockControlBar должно помочь

Саша.
Re: Про CDialogBar
От: Sasparella США  
Дата: 18.01.02 14:44
Оценка:
Здравствуйте edikk, Вы писали:

E>Есть три созданных DialogBar-а, и при запуски MDI приложения они открываются. Но, они небольшие по размеру, и хотелось бы их расположить в ряд верткально в левой части окна (пример фотошоп, в правой части окна в ряд вертикально по умолчанию). А по умолчанию в той же левой части окна они распологаются горизонтально. Как сделать так как хочется?


Еще вот — мож пригодится...

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

        // get MFC to adjust the dimensions of all docked ToolBars
        // so that GetWindowRect will be accurate
        RecalcLayout();
        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 in effect
        // are simulating a Toolbar being dragged to that location and docked.
        DockControlBar(Bar,n,&rect);
}
Re[2]: Про CDialogBar
От: Koumandin Россия  
Дата: 18.01.02 21:32
Оценка:
Здравствуйте Sasparella, Вы писали:

S>Еще вот — мож пригодится...


S>
S>void CMainFrame::DockControlBarLeftOf(CControlBar* Bar,CControlBar* LeftOf)
S>{
.
.
.
S>        n = 0;
S>        n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;
S>        n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
S>        n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
S>        n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;
.
.
.
S>}

S>


Спасибо за совет. Хотел то же спросить, а не пришлось даже писать !
Единственно, что вышеуказанный кусок кода удивляет своей громоздкостью и избыточностью !
PS Кстати, хотел поставить смайлик в середину уже напечатанной строки — а он добивается в конец текста
Re[2]: Про CDialogBar
От: edikk www.ed.kaliningrad.ru
Дата: 21.01.02 14:15
Оценка:
Здравствуйте Sasparella, Вы писали:

S>Здравствуйте edikk, Вы писали:


E>>Есть три созданных DialogBar-а, и при запуски MDI приложения они открываются. Но, они небольшие по размеру, и хотелось бы их расположить в ряд верткально в левой части окна (пример фотошоп, в правой части окна в ряд вертикально по умолчанию). А по умолчанию в той же левой части окна они распологаются горизонтально. Как сделать так как хочется?


S>Еще вот — мож пригодится...


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

S>        // get MFC to adjust the dimensions of all docked ToolBars
S>        // so that GetWindowRect will be accurate
S>        RecalcLayout();
S>        LeftOf->GetWindowRect(&rect);
S>        rect.OffsetRect(1,0);
S>        dw=LeftOf->GetBarStyle();
S>        n = 0;
S>        n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;
S>        n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
S>        n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
S>        n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;

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

S>

Спасибо, это работает. Но, к примеру есть 3 таких окна, они расположилисб как надо — вертикально. Потом закрывается 2 и 3 окно. И открывается 3 окно, получается дыра вместо 2 окна. Это как то решается?
Re[3]: Про CDialogBar
От: Sasparella США  
Дата: 21.01.02 14:27
Оценка:
Здравствуйте edikk, Вы писали:


E>Спасибо, это работает. Но, к примеру есть 3 таких окна, они расположилисб как надо — вертикально. Потом закрывается 2 и 3 окно. И открывается 3 окно, получается дыра вместо 2 окна. Это как то решается?


CWnd::RepositionBars();


Ну или вручную их двигат по закрытию каждого.


Саша.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.