我有一个单文档MFC项目,我正在使用Visual Studio 2008实现。
这是我遇到的问题的图像。此图片已经过编辑,以确保您的安全。
如果图像未在您的网络浏览器中加载,则以下是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无法正确调整窗格大小?
更新
只要right <= 200
,它的大小似乎正确。如果我在此之后尝试增加尺寸,则没有任何反应。
如果我的尺寸非常小(~10),我会看到一些奇怪的分隔符出现 该窗格似乎不希望通过此分隔符增加大小。 我不确定这个分频器来自何处或如何摆脱它。
答案 0 :(得分:1)
如果Panel4中的问题太小,请尝试使用SetMinSize(...)
功能