У меня есть Односторонний документ проекта MFC, что я реализую с помощью Visual Studio 2008.Четвертый CDockablePane не размер правильно
Вот изображение этой проблемы у меня возникли. Это изображение было отредактировано для вашей безопасности.
Если изображение не загружается в вашем веб-браузере, вот 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), я вижу, как появляется странный разделитель.
Панели, похоже, не хотят расти в размерах мимо этого разделителя. Я не уверен, откуда пришел этот разделитель или как избавиться от него.
Почему вы разделив ширину на 6? – rrirower
@rrirower Прежде чем пытаться получить математическое право, чтобы оно заполнило все свободное пространство, я хотел посмотреть, могу ли я хотя бы дать ему тот же размер, что и Panes 1 и 3. К сожалению, он не меняет размеры независимо от того, какую ширину я им даю. – jliv902
Вы пробовали отладку в RecalcLayout? – rrirower