2012-05-19 11 views
0

Теперь мои бары, расположенный на раме, благодаря nDockBarID = AFX_IDW_DOCKBAR_LEFTКонкретная стыковка к раме

ForcesBar* m_forcesBar[3]; 

    for (int i=0; i<3; i++) 
{ 
    m_forcesBar[i]->SetBarStyle(m_forcesBar[i]->GetBarStyle() | 
     CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); 
    m_forcesBar[i]->EnableDocking(CBRS_ALIGN_ANY); 
} 

pMainFrame->EnableDocking(CBRS_ALIGN_ANY); 

pMainFrame->DockControlBar(m_forcesBar[0], AFX_IDW_DOCKBAR_LEFT); 
pMainFrame->DockControlBar(m_forcesBar[1], AFX_IDW_DOCKBAR_LEFT); 
pMainFrame->DockControlBar(m_forcesBar[2], AFX_IDW_DOCKBAR_LEFT); 

enter image description here

В то время как я хочу получить такой бар сочетание:

enter image description here

I думаю, что будет полезно использовать lpRect в

void DockControlBar(
    CControlBar* pBar, 
    UINT nDockBarID = 0, 
    LPCRECT lpRect = NULL 
); 

, но, к сожалению, он не работает. Можете ли вы привести пример кода для создания такого конкретного doking (secon picture).

(В проекте я использую CSizingControlBar http://www.datamekanix.com/sizecbar/manual.html)

+0

Как насчет использования 'AFX_IDW_DOCKBAR_BOTTOM' вместо' AFX_IDW_DOCKBAR_LEFT'? – Attila

+0

Если это так, я получу бары в левой и нижней части экрана. Таким образом, нет ничего общего с изображением 2. – Diego666

+0

Attila, вот изображение вашего решения: http://me4u.ru/i/ywy.jpg – Diego666

ответ

1

Я проверил его и используя прямоугольник отлично работает. Отличие заключается в том, что в моем тестовом приложении я объявил m_forcesBar в mainfrm.h, как

ForcesBar m_forcesBar[3]; 

избежать выделения в куче и запоминание освобождения памяти.

Код я использовал (фрагмент из OnCreate):

EnableDocking(CBRS_ALIGN_ANY); 

m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY); 
m_wndToolBar2.EnableDocking(CBRS_ALIGN_ANY); 

DockControlBar(&m_wndToolBar1); 
DockControlBar(&m_wndToolBar2); 

CRect rectWnd; 
GetClientRect(rectWnd); 
ClientToScreen(rectWnd); 

for(int iIndx = 0; iIndx < 3; iIndx++) 
{ 
    if (!m_forcesBar[iIndx].Create(_T(""), this, 120 + iIndx)) 
    { 
     TRACE0("Failed to create mybar\n"); 
     return -1;  // fail to create 
    } 

    m_forcesBar[iIndx].SetBarStyle(m_forcesBar[iIndx].GetBarStyle() | 
     CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); 


    m_forcesBar[iIndx].EnableDocking(CBRS_ALIGN_LEFT); 



    DockControlBar(&m_forcesBar[iIndx], AFX_IDW_DOCKBAR_LEFT, rectWnd); 


} 

То есть это.

+0

Спасибо. JohnCz, как я могу установить высоту этих баров во время стыковки? – Diego666

 Смежные вопросы

  • Нет связанных вопросов^_^