需要将锚定/停靠添加到旧版MFC对话框应用程序

时间:2013-04-18 18:35:15

标签: mfc

我正在使用我认为是在90年代早期开发的MFC代码。我已经完成了将软件带入21世纪的伟大任务,让它在Windows 7/8等版本上运行。该应用程序面向众多平台,其中一个是Windows XP。原始软件具有固定的窗口大小,并且在某些操作系统上看起来很糟糕。我设法克服了这个问题,但是对话框的大小留下了很多灰色空间。我需要加入锚和对接,类似于.NET。

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

作为一个快速解决方案,我认为调整对话框的大小应该会导致以下情况。

  1. 横幅左右锚定
  2. LHS / RHS含量分为60/40
  3. 页脚符合横幅
  4. 由于不同的控件用于不同的目标操作系统/平台,因此更加困难。基本上,OnInitDialog使用条件编译来动态添加控件,具体取决于平台。

    为了实现这一点,我猜我需要类似以下内容......

    1. 每个控件都“记住”它的界限 我希望这很棘手,因为没有用于对话框子控件的WM_CREATE消息。 可能使用OnParentNotify。
    2. 调整对话框的大小“记住”其最后一个大小并计算宽度和高度的差异。 该对话框向其直接子节点发送父调整大小消息,以便他们可以重新计算布局。
    3. 最后,我的问题是,最好的方法是什么? 我有一个想法...

      1. 引入一个新的Widget类,它扩展CWnd并通过虚方法返回锚点详细信息。
      2. 创建实施Widget
      3. 的控件,如CBanner,CCopyright,CFooter等
      4. 为适当调整LHS和RHS内容大小的内容创建RowWidget。
      5. 现在很难说出来! 任何帮助表示赞赏。

        由于

        卡尔

1 个答案:

答案 0 :(得分:1)

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

例如this CodeProject article执行我认为您需要的内容。