gpt4 book ai didi

C++/MFC : CDockablePane in CMDIChildWndEx

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:15:49 25 4
gpt4 key购买 nike

我想在我的 MDI 子窗口中创建两个 CDockablePane 对象。最初,它们应该停靠在底部,但用户可以 float 它们。我从 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;
}

首先, Pane 不能 float 。我可以通过将以下语句添加到我的 CChildFrame 构造函数来解决此问题:

CMDIChildWndEx::m_bEnableFloatingBars = TRUE;

这解决了非 float 问题,但我怀疑这是该问题的规范解决方案。有人能判断吗?你是如何解决这个问题的?

我无法解决的问题是 Pane 最初的高度 = 0。有趣的是,如果我打开同一个类的第二个或第三个子框架,它会起作用并且它们最初是可见的(高度 = 200)。如果我将它们全部关闭并打开一个新的,高度再次为 0,并且只出现可用于调整高度的 slider 。但是,我需要能够真正看到第一个子框架的面板。

如果我要提供更多示例代码,请告诉我。如果我做错了什么(是否支持在子框架中包含 Pane ?),也请告诉我。

估计跟下面链接描述的问题是一样的。但这个问题没有答案。 https://social.msdn.microsoft.com/forums/en-US/7494e84f-e5fd-4726-b8fe-9c702c7e25f1/cmdichildwndex-and-cdockablepane-issue

最佳答案

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

但我只是使用 SetMinSize 方法解决了问题, 这是从 CPane 继承的,在 Pane 创建之后。

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

关于C++/MFC : CDockablePane in CMDIChildWndEx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33736428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com