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

需要将锚定/停靠添加到传统MFC对话框应用程序,mfc,Mfc,我正在使用MFC代码,我相信它是在90年代早期开发的。我被赋予了将软件带入21世纪的伟大任务,让它在Windows7/8之类的平台上运行。该应用程序面向多种平台,其中一种是Windows XP。最初的软件有固定的窗口大小,在某些操作系统上看起来很糟糕。我已经设法克服了这一点,但是调整对话框的大小会留下很多灰色空间。我需要结合锚和对接,类似于.NET 和往常一样,时间是有限的,所以我需要快速的“脏”解决方案,直到我有时间重写UI层。该应用程序包含多个“屏幕”,每个屏幕都遵循类似的格式。顶部的横幅、

我正在使用MFC代码,我相信它是在90年代早期开发的。我被赋予了将软件带入21世纪的伟大任务,让它在Windows7/8之类的平台上运行。该应用程序面向多种平台,其中一种是Windows XP。最初的软件有固定的窗口大小,在某些操作系统上看起来很糟糕。我已经设法克服了这一点,但是调整对话框的大小会留下很多灰色空间。我需要结合锚和对接,类似于.NET

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

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

  • 横幅左右锚定
  • LHS/RHS内容分为60/40
  • 页脚与横幅一致
  • 由于不同的目标操作系统/平台使用不同的控件,这就变得更加困难。基本上,OnInitDialog使用条件编译来根据平台动态添加控件

    要实现这一点,我想我需要如下内容

  • 每个控件“记住”其边界 我认为这很棘手,因为没有WM_为对话框子控件创建消息。 可能使用OnParentNotify
  • 调整对话框大小会“记住”其最后一个大小,并计算宽度和高度的差异。 该对话框将向其直接子级发送一条父级调整大小消息,以便它们可以重新计算布局
  • 最后,我的问题是,什么是实现这一点的最佳方式? 我有一个想法

  • 引入一个新的小部件类,该类扩展CWnd并通过虚拟方法返回锚定细节
  • 创建实现小部件的控件,如CBanner、CCopyright、CFooter等
  • 为适当调整LHS和RHS内容大小的内容创建RowWidget
  • 现在这很难用语言表达了! 谢谢你的帮助

    谢谢


    Karl

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

    例如,我认为你需要什么