【发布时间】:2010-09-14 21:50:07
【问题描述】:
如何将 CControlBar 派生窗口停靠在拆分器窗口 (CSplitterWnd) 的中间?我希望在移动分隔器时重新定位条。
为了让我更清楚地了解我的目标,想象一下 Visual Studio 对话框编辑器中的垂直标尺(仅限 MFC)。每当调整树视图的大小时,它都会重新定位。
【问题讨论】:
标签: c++ visual-studio winapi visual-c++ mfc
如何将 CControlBar 派生窗口停靠在拆分器窗口 (CSplitterWnd) 的中间?我希望在移动分隔器时重新定位条。
为了让我更清楚地了解我的目标,想象一下 Visual Studio 对话框编辑器中的垂直标尺(仅限 MFC)。每当调整树视图的大小时,它都会重新定位。
【问题讨论】:
标签: c++ visual-studio winapi visual-c++ mfc
阿尔夫,
在 VS 的情况下,没有使用拆分器: 资源视图是一个可调整大小的 ControlBar(它看起来和感觉像一个拆分器,但它不是一个 CSplitterWnd)。 其余的是一个子框架(选项卡式或 MDI。转到工具/选项/环境/常规并选择多个文档来说服自己)。标尺是子框架的一部分(控制栏?)。
在您的情况下,我认为您不想要 3 个窗格拆分器。您需要一个 2 窗格拆分器,并且控制栏应该是您的视图的一部分(它本身不是 CControlBar)。除非您使用 MDI,否则您可以在子框架中将其设置为真正的 ControlBar。
HTH
【讨论】:
塞尔吉, 对不起,我不是很清楚。拆分器将位于资源视图和标尺栏之间。它看起来像这样:
资源视图 |垂直尺 |查看
无论如何,我找到了(现在显而易见的)答案:将主框架分成三个窗口:
m_wndSplitter.CreateStatic(this, 1, 3);
m_wndLeftPane.Create(&m_wndSplitter,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0, 0));
m_ruler.Create(&m_wndSplitter,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0, 1));
m_wndSplitter.CreateView(0, 2, pContext->m_pNewViewClass, CSize(300, 0), pContext);
SetActiveView((CScrollView*)m_wndSplitter.GetDlgItem(m_wndSplitter.IdFromRowCol(0, 2)));
【讨论】: