第四个CDockablePane的大小不正确

时间:2014-02-21 17:57:39

标签: c++ mfc

我有一个单文档MFC项目,我正在使用Visual Studio 2008实现。

这是我遇到的问题的图像。此图片已经过编辑,以确保您的安全。

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无法正确调整窗格大小?

更新

只要right <= 200,它的大小似乎正确。如果我在此之后尝试增加尺寸,则没有任何反应。

如果我的尺寸非常小(~10),我会看到一些奇怪的分隔符出现 该窗格似乎不希望通过此分隔符增加大小。 我不确定这个分频器来自何处或如何摆脱它。

Strange divider

1 个答案:

答案 0 :(得分:1)

如果Panel4中的问题太小,请尝试使用SetMinSize(...)功能