我正在使用我认为是在 90 年代初开发的 MFC 代码。我被赋予了将软件带入 21 世纪的艰巨任务,使其能够在 Windows 7/8 之类的系统上运行。该应用程序面向众多平台,其中一个是 Windows XP。原始软件具有固定的窗口大小,在某些操作系统上看起来很糟糕。我已经设法克服了这个问题,但是调整对话框的大小会留下很多灰色空间。我需要合并锚点和对接,类似于 .NET。
与往常一样,时间是有限的,所以我需要快速、“肮脏”的解决方案,直到我有时间重写 UI 层。该应用程序包含许多“屏幕”,每个屏幕都遵循类似的格式。顶部的横幅,内容包括版权、LHS 上的帮助和 RHS 上的任务按钮以及一种包含“热键”的页脚控件。
作为一个快速修复,我认为调整对话框大小应该会导致以下问题。
- 横幅左右锚定
- LHS/RHS 内容分为 60/40
- 页脚与横幅一致
由于不同的控件用于不同的目标操作系统/平台,因此这变得更加困难。基本上,OnInitDialog 使用条件编译来根据平台动态添加控件。
为了实现这一点,我猜我需要类似以下的东西......
- 每个控件“记住”它的边界我希望这会很棘手,因为对话框子控件没有 WM_CREATE 消息。可能使用 OnParentNotify。
- 调整对话框大小会“记住”它的最后大小并计算宽度和高度的差异。该对话框向其直接子级发送父级调整大小消息,以便他们可以重新计算布局。
最后,我的问题是解决这个问题的最佳方法是什么?我有一个想法...
- 引入一个新的 Widget 类,该类扩展 CWnd 并通过虚拟方法返回锚点详细信息。
- 创建实现 Widget 的控件,例如 Cbanner、CCopyright、CFooter 等
- 为适当调整 LHS 和 RHS 内容大小的内容创建 RowWidget。
现在这很难用语言表达!任何帮助表示赞赏。
谢谢
卡尔