【问题标题】:How to limit the number of MDI tab groups如何限制 MDI 选项卡组的数量
【发布时间】:2015-05-13 17:20:26
【问题描述】:

我已经使用tabbed group 创建了一个 MDI 应用程序。

每次我从标签栏拖放一个标签到视图时,它都会创建一个新的标签组并根据标签组的数量划分视图。但我想让我的应用程序只创建两个选项卡组。

我已经通过与拖放选项卡相关的选项卡组重新组合一个新选项卡组来完成我的工作。

但这个解决方案并不好,因为视图会短暂闪烁。

我正在寻找更好的解决方案。我知道:拖放选项卡以查看 => 创建新选项卡组是 MDI 选项卡组的默认支持。

如何检查和预防?

【问题讨论】:

  • 有没有人可以帮我解决这个问题?

标签: c++ mfc


【解决方案1】:

分离和移动 Tabs arround 的完整工作是根据消息 AFX_WM_ON_MOVETABCOMPLETE(已注册的 Windows 消息)完成的,该消息由 CMDIClientAreaWnd::OnMoveTabComplete 处理。

因此,您可以子类化您的 MDI 客户端窗口并截取消息。 检查你想要什么,如果你不想让拖放操作返回。

如果您想允许此拖放操作,只需调用基本实现 CMDIClientAreaWnd::OnMoveTabComplete。

【讨论】:

  • 非常感谢您的回复。但你能解释更多:如何拦截该消息?我需要创建我的 MDI 客户端窗口来使用而不是默认的 CMDIClientAreaWnd。我不知道该怎么做,因为我看到 MDI 客户端被系统类 CMDIFrameWndEx 使用。
  • AFAIK 客户端窗口是在名为 CreateClient 的框架函数中创建的。派生我们自己的类并为该消息创建一个处理程序。
  • 我的应用程序中的 CMainFrame 继承了 CMDIFrameWndEx,并且 CMDIFrameWndEx 继承了默认的 MDI 客户端窗口本身。所以我不能继承其他 MDI 客户端窗口 :(。silviuardelean.ro/2012/10/21/… 是否有另一种方法来拦截该消息?。
  • 你可以只使用“经典子类化”
猜你喜欢
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多