Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;/CMDIChildWndEx中的MFC:CDockablePane_C++_Mfc - Fatal编程技术网

C++ C++;/CMDIChildWndEx中的MFC:CDockablePane

C++ C++;/CMDIChildWndEx中的MFC:CDockablePane,c++,mfc,C++,Mfc,我想在MDI子窗口中创建两个CDockablePane对象。最初,它们应该固定在底部,但用户应该有可能使它们浮动。 我从MFC项目向导创建的代码开始。然后,我将代码从表示主框架的类移动到表示子框架的类(CChildFrame)。我的结局是: int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIChildWndEx::OnCreate(lpCreateStruct) == -1) { retu

我想在MDI子窗口中创建两个CDockablePane对象。最初,它们应该固定在底部,但用户应该有可能使它们浮动。 我从MFC项目向导创建的代码开始。然后,我将代码从表示主框架的类移动到表示子框架的类(CChildFrame)。我的结局是:

int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CMDIChildWndEx::OnCreate(lpCreateStruct) == -1) {
        return -1;
    }

    EnableDocking(CBRS_ALIGN_ANY);
    EnableAutoHidePanes(CBRS_ALIGN_ANY);

    // Create left window and dock to ChildFrame
    m_wndOutput.Create(_T("Left pane"), this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_OUTPUTWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI);
    m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);
    DockPane(&m_wndOutput);

    // Create right window and dock to the left pane
    m_wndProperties.Create(_T("Right pane"), this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI);
    m_wndProperties.EnableDocking(CBRS_ALIGN_ANY);
    m_wndProperties.DockToWindow (&m_wndOutput, CBRS_ALIGN_RIGHT);

    return 0;
}
首先,窗格玻璃无法漂浮。我可以通过向CChildFrame构造函数添加以下语句来修复此问题:

CMDIChildWndEx::m_bEnableFloatingBars=TRUE

这解决了非浮动问题,但我怀疑这是否是该问题的标准解决方案。有人能判断吗?你如何解决这个问题

我无法解决的问题是窗格最初的高度为0。 有趣的是,如果我打开同一类的第二个或第三个子帧,它会工作,并且它们最初是可见的(高度=200)。如果我将它们全部关闭并打开一个新的,高度将再次为0,并且仅显示可用于调整高度的滑块。然而,我需要能够真正看到面板也为第一个子帧

如果我要提供更多的样本代码,请让我知道。 如果我做了一些完全错误的事情(支持在子框架中使用窗格吗?),也请让我知道

我猜下面链接中描述的问题是相同的。但这个问题没有答案。

我无法完全解决这个问题,最终我在主框架中创建了可停靠窗格,并将其隐藏起来,直到打开子框架。 该问题的部分解决方案是为窗格设置最小大小。这导致了他们不再被隐藏的情况


我的结论是,可停靠窗格不应该为子框架创建(或由子框架控制)。

遗憾的是,这将在2年后到来=)

但我只是在创建窗格后,使用从CPane继承的方法解决了这个问题

m_wndProperties.SetMinSize(CSize(200,200));

你读过这个吗?我发现它消除了许多关于CDockablePane的模糊之处,尽管这些年来我已经用试错法解决了大部分问题。是的,我读过。这里的所有示例都使用主框架来添加可停靠窗格。我不会说:如果您想将CDockablePane停靠到CChildFrame中,那么一切都有解决方案:请参见此处