gpt4 book ai didi

c++ - 无法正确调整 CToolBar 子类的大小

转载 作者:行者123 更新时间:2023-11-28 03:24:56 25 4
gpt4 key购买 nike

我的目标是拥有一个 CToolBar 衍生产品,它具有单一控件(CMFCShellTreeCtrl)。

类似于:

class CFileTreeBar : public CToolBar

每当它被要求计算它的大小时,我想回答它要么是一个固定的最小值,要么是它停靠到的停靠栏的客户区的大小。换句话说,它应该占用停靠栏的整个高度 + 固定宽度(停靠在左侧 - 与资源管理器在左侧布置其文件夹树完全一样)。

因此,在 CFileTreeBar::CalcFixedLayout 中,它响应基于 GetParent()->GetWindowRect(rect) 的高度和 250pix 的宽度。

然后在 OnSize 中,CFileTreeBar 调整其 CMFCShellTreeCtrl 的大小以使用我们的客户端矩形(最大化我们唯一的控件)。

这在最初显示控制栏时效果很好。通过拖动一个角来调整窗口大小时效果很好。 CaclFixedLayout 返回一个与其先前值不同的值(因为窗口大小已更改),因此它计算出它应该占用整个垂直空间,最终我收到一条 WM_SIZE 消息告诉我的控制栏调整大小,这导致我更新大小的 CMFCShellTreeCtrl。

我挣扎的地方是在 CFrameWnd 上点击“最大化”按钮时。在这种情况下,出于我不太了解的原因,调用了 CalcFixedLayout 但停靠栏具有其旧大小(尚未根据最大化将其更新为新大小)。这导致我的代码响应大小应该与之前相同 - 这导致 MFC 框架工作不发出调整大小(我们已经达到我们声称需要的大小)。

因此,片刻之后停靠栏被扩展以占用整个垂直空间,但我的控制栏及其底层 shell 树没有调整大小 - 但留下了陈旧的大小。

从最大化到恢复时也会出现此问题。那时对 CalcFixedLayout 的调用表明我们应该和最大化的窗口一样高(它的当前大小),现在框架工作开始调整大小的代码,最终使我们比停靠栏大(一旦它被缩小)恢复大小),然后我们消失在停靠栏底部下方(被其最大垂直范围裁剪)。

问题

  1. 是否有好的教程或白皮书概述停靠栏和控制栏应该如何在 MFC 中交互?即完整描述这个框架应该如何正确地卡在一起?了解这些部分如何组合在一起并旨在连贯地工作将大大有助于避免破解它工作,让我可以写一些适合圆孔的东西,可以这么说。
  2. 是否有任何人都知道的与此类似的示例项目?必须弄清楚这些垃圾是非常耗时的——如果某处有一个例子可以做到这一点,那就太好了……

最佳答案

Dockable and resizable toolbar 代码编写起来相当复杂,codeproject中有一个非常好。可以研究源码看看作者是怎么做的。

http://www.codeproject.com/Articles/6/CSizingControlBar-a-resizable-control-bar

关于c++ - 无法正确调整 CToolBar 子类的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364754/

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