【问题标题】:Windows C++ dialog resizer classWindows C++ 对话框调整器类
【发布时间】:2010-09-13 18:16:21
【问题描述】:

我正在寻找一个非常好的对话框调整器类,它可以在调整屏幕大小时根据需要拉伸和收缩各个项目。 Stephan Keil 有一个很好的 (DlgResizeHelper),它基本上可以按设定的比例调整所有内容的大小,但我正在寻找更智能的东西。

例如:

  • 图标不应调整大小

  • 单行文本框不应垂直拉伸

  • 按钮应该保持相同的大小

基本上,我正在寻找可以查看所有控件的内容,找出静态文本字段与其旁边/下方的控件相关,并将两者锚定在一起,并以“智能”方式调整大型控件的大小所以看起来不错。

有这样的框架吗?我一直在做一个,但现成的可能会更好。

跟进:我正在查看建议的解决方案。其中许多要求您在对话框上的每个控件中加入一个锚点。我正在寻找一些智能的东西,它可以找出锚点应该是什么,并且能够在猜测错误时手动锚点。似乎应该是可能的——大多数人会同意编辑字段旁边的静态文本字段应该锚定在一起。猜猜我在这里几乎是在寻找一个小 AI :)

【问题讨论】:

    标签: c++ windows mfc dialog resize


    【解决方案1】:

    这也是 CodeProject 提供的免费解决方案
    http://www.codeproject.com/KB/dialog/dlgresizearticle.aspx
    它只是一组简单的宏,用于在对话框调整大小时定位控件。

    编辑 - 跟随 OPs cmets。我不知道像 QT/WX 对 MFC 的任何一般的 sizer 支持,它似乎也不存在于 Winforms 等新框架中。
    它在 QT/WX 中是因为它对于多平台来说是必要的,其中小部件可能具有不同的大小,这解释了 MS 缺乏它的原因。但它对于多语言端口也很重要,例如。其中取消的德语为 30 个字符。

    【讨论】:

      【解决方案2】:

      我尝试了很多,最终选择了http://www.codeproject.com/KB/dialog/layoutmgr.aspx。但它并没有执行您建议的“智能”布局。我从来没有在任何图书馆、任何平台上看到过这种情况——如果没有大量的底层魔法,无论如何都必须在一半的时间里被覆盖,我看不出它是如何工作的。

      【讨论】:

        【解决方案3】:

        我们使用 CodeGuru 的 CResize 类来自动调整所有控件的大小。你告诉你希望如何调整每个控件的大小,它会为你完成这项工作。

        调整大小范例是指定当对话框调整大小时控件的每一侧将移动多少。

        SetResize(IDC_EDIT1, 0,   0,   0.5, 1);
        SetResize(IDC_EDIT2, 0.5, 0,   1,   1);
        

        当您有大量对话框控件时非常方便。

        Source code

        【讨论】:

          【解决方案4】:

          您可以使用 wxWidgets。它完全替代了 MFC,是多平台的,并为您提供了基于布局的对话框机制。

          【讨论】:

            【解决方案5】:

            我在代码项目 IIRC 中使用 ResizableLib(PropertySheets 和 Pages 也是如此)。您可以设置锚点来确定对话框和控件在对话框移动时如何调整大小或移动。

            您可以为每个控件设置最多 2 个锚点(左、右),以便您可以在对话框移动时移动它们,或者在移动时调整它们的大小。它很容易理解,如果很难完全正确:)

            【讨论】:

              【解决方案6】:

              您可以查看Professional GUI,我们使用他们的类库来调整对话框控件的大小。我认为这是他们免费版本的一部分。

              【讨论】:

                【解决方案7】:

                Ultimate Toolbox MFC 库(CodeProject 上的here)包括一个layout manager。我自己没有用过,但看起来它可以满足您的需求。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2023-03-13
                  • 2013-01-08
                  • 2014-12-26
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多