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

Posted

技术标签:

【中文标题】需要向旧版 MFC 对话框应用程序添加锚定/停靠【英文标题】:Need to add anchoring/docking to legacy MFC dialog application 【发布时间】:2013-04-18 18:35:15 【问题描述】:

我正在使用我认为是在 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。

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

谢谢

卡尔

【问题讨论】:

【参考方案1】:

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

例如this CodeProject article 做我认为你需要的。

【讨论】:

以上是关于需要向旧版 MFC 对话框应用程序添加锚定/停靠的主要内容,如果未能解决你的问题,请参考以下文章

html HTML / JQUERY:将窗口宽度特定类设置为body标签。用于向旧版浏览器添加媒体查询支持或添加宽度指定

html HTML / JQUERY:将窗口宽度特定类设置为body标签。用于向旧版浏览器添加媒体查询支持或添加宽度指定

html HTML / JQUERY:将窗口宽度特定类设置为body标签。用于向旧版浏览器添加媒体查询支持或添加宽度指定

html HTML / JQUERY:将窗口宽度特定类设置为body标签。用于向旧版浏览器添加媒体查询支持或添加宽度指定

html HTML / JQUERY:将窗口宽度特定类设置为body标签。用于向旧版浏览器添加媒体查询支持或添加宽度指定

html HTML / JQUERY:将窗口宽度特定类设置为body标签。用于向旧版浏览器添加媒体查询支持或添加宽度指定