2014-02-21 5 views
0

У меня есть Односторонний документ проекта MFC, что я реализую с помощью Visual Studio 2008.Четвертый CDockablePane не размер правильно

Вот изображение этой проблемы у меня возникли. Это изображение было отредактировано для вашей безопасности.

An image with four panes

Если изображение не загружается в вашем веб-браузере, вот ASCII рендеринга его:

--------------------------------------------------- 
| Pane 1 | Pane 2 | Pane 3 | P | (Pane 4 is | 
|  |    |  | a | too small | 
|  |    |  | n | no matter | 
|  |    |  | e | what width | 
|  |    |  | 4 | I give it.)| 
|  |    |  | |   | 
--------------------------------------------------- 

три левые большинство стекол размер правильно просто отлично, но четвертая панель выходит тем же (неправильным) размером, независимо от того, какую ширину я им даю.

Вот что мой CMainFrame::OnCreate() выглядит следующим образом:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
    // Omitting lots of automatically generated code here 

    if (this->InitMyPane1() == FALSE) { 
     return -1 ; 
    } 

    if (this->InitMyPane2() == FALSE) { 
     return -1 ; 
    } 

    if (this->InitMyPane3() == FALSE) { 
     return -1 ; 
    } 

    if (this->InitMyPane4() == FALSE) { 
     return -1 ; 
    } 

    return 0; 
} 

Код для всех этих функций InitMyPaneX() очень похожи. Это InitMyPane4(), который, как представляется, приводит к неправильным результатам.

BOOL CMainFrame::InitMyPane4() 
{ 
    CRect rect ; 
    this->GetClientRect (&rect) ; 

    int right = static_cast <int> (rect.Width()/6) ; 
    int bottom = rect.Height() ; 

    DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_ALIGN_LEFT | CBRS_FLOAT_MULTI ; 

    BOOL bOk = m_MyPane4.Create (
     _T ("My Pane 4"), this, 
     CRect (0, 0, right, bottom), TRUE, IDC_MY_PANE_4, dwStyle 
    ) ; 

    if (bOk == FALSE) { 
     return FALSE ; 
    } 

    m_MyPane4.EnableDocking (CBRS_ALIGN_ANY) ; 
    this->DockPane ((CBasePane *) &m_MyPane4, AFX_IDW_DOCKBAR_LEFT) ; 
    this->RecalcLayout() ; 

    return bOk ; 
} 

right переменной в коде выше, что должно быть изменение ширины панели, но это, кажется, не влияют независимо от того, какое значение я даю его.

Что может привести к тому, что MFC не будет правильно изменять размер панели?

UPDATE

кажется, размер правильно, пока right <= 200. Если после этого я попытаюсь увеличить размер, ничего не произойдет.

Если я делаю размер действительно маленьким (~ 10), я вижу, как появляется странный разделитель.
Панели, похоже, не хотят расти в размерах мимо этого разделителя. Я не уверен, откуда пришел этот разделитель или как избавиться от него.

Strange divider

+0

Почему вы разделив ширину на 6? – rrirower

+0

@rrirower Прежде чем пытаться получить математическое право, чтобы оно заполнило все свободное пространство, я хотел посмотреть, могу ли я хотя бы дать ему тот же размер, что и Panes 1 и 3. К сожалению, он не меняет размеры независимо от того, какую ширину я им даю. – jliv902

+0

Вы пробовали отладку в RecalcLayout? – rrirower

ответ

1

Если ваша проблема в том, что Panel4 слишком мал, попробуйте SetMinSize(...) функцию на нем

+0

Я пробовал это, но это не сработало. Я почти уверен, что проблема связана с разделителем панели. – jliv902

+0

У меня есть эта функция, работающая для меня в 4 моих панелях на мэйнфрейме, у которого есть еще много.Возможно, ваше окно слишком маленькое, или сопряжение между всеми панелями не может дать ему эту ширину. – sergiol

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