4

我正在使用我认为是在 90 年代初开发的 MFC 代码。我被赋予了将软件带入 21 世纪的艰巨任务,使其能够在 Windows 7/8 之类的系统上运行。该应用程序面向众多平台,其中一个是 Windows XP。原始软件具有固定的窗口大小,在某些操作系统上看起来很糟糕。我已经设法克服了这个问题,但是调整对话框的大小会留下很多灰色空间。我需要合并锚点和对接,类似于 .NET。

与往常一样,时间是有限的,所以我需要快速、“肮脏”的解决方案,直到我有时间重写 UI 层。该应用程序包含许多“屏幕”,每个屏幕都遵循类似的格式。顶部的横幅,内容包括版权、LHS 上的帮助和 RHS 上的任务按钮以及一种包含“热键”的页脚控件。

作为一个快速修复,我认为调整对话框大小应该会导致以下问题。

  1. 横幅左右锚定
  2. LHS/RHS 内容分为 60/40
  3. 页脚与横幅一致

由于不同的控件用于不同的目标操作系统/平台,因此这变得更加困难。基本上,OnInitDialog 使用条件编译来根据平台动态添加控件。

为了实现这一点,我猜我需要类似以下的东西......

  1. 每个控件“记住”它的边界我希望这会很棘手,因为对话框子控件没有 WM_CREATE 消息。可能使用 OnParentNotify。
  2. 调整对话框大小会“记住”它的最后大小并计算宽度和高度的差异。该对话框向其直接子级发送父级调整大小消息,以便他们可以重新计算布局。

最后,我的问题是解决这个问题的最佳方法是什么?我有一个想法...

  1. 引入一个新的 Widget 类,该类扩展 CWnd 并通过虚拟方法返回锚点详细信息。
  2. 创建实现 Widget 的控件,例如 Cbanner、CCopyright、CFooter 等
  3. 为适当调整 LHS 和 RHS 内容大小的内容创建 RowWidget。

现在这很难用语言表达!任何帮助表示赞赏。

谢谢

卡尔

4

1 回答 1

1

实际上是一个非常常见的问题,您的推理是合理的,但与其重新发明轮子,不如先看看您描述的一些免费提供的实现。

例如,这篇 CodeProject 文章可以满足我的需求。

于 2013-04-19T04:44:14.467 回答