Windows C++ 对话框缩放器类
题
我正在寻找一个非常好的对话框调整器类,它将在调整屏幕大小时根据需要拉伸和收缩各个项目。Stephan Keil 有一个很好的工具(DlgResizeHelper),它基本上可以按设定的比例调整所有内容的大小,但我正在寻找更智能的东西。
例如:
图标不应调整大小
单行文本框不应垂直拉伸
按钮应该保持相同的大小
基本上,我正在寻找一些东西来查看所有控件,找出静态文本字段与其旁边/下面的控件相关,并将两者锚定在一起,并以“智能”方式调整大型控件的大小,使其看起来好的。
有这样的框架吗?我一直在研究一个,但现成的东西可能会更好。
跟进:我正在查看建议的解决方案。其中许多要求您在对话框中的每个控件中定位一个锚点。我正在寻找一些智能的东西,它可以找出锚点应该是什么,并且能够在猜测错误时手动锚定。看起来应该是可能的——大多数人都会同意编辑字段旁边的静态文本字段应该锚定在一起。我猜我正在寻找一点人工智能:)
解决方案
您可以使用 wxWidgets。它完全取代了 MFC,是多平台的,并为您提供了基于布局的对话框机制。
其他提示
我用 可调整大小库 (还有 PropertySheets 和 Pages)来自 codeproject、IIRC。您可以设置锚点来确定对话框和控件如何随着对话框的移动而调整大小或移动。
您可以为每个控件设置最多 2 个锚点(左、右),以便您可以在对话框移动时移动它们,或者在移动时调整它们的大小。它很容易理解,但很难完全正确:)
我尝试了很多,最后决定 http://www.codeproject.com/KB/dialog/layoutmgr.aspx. 。但它并没有执行您建议的“智能”布局。我从来没有在任何图书馆、任何平台上看到过这种情况——我不知道如果没有大量的底层魔法,它会如何工作,无论如何,这些魔法必须在一半的时间被覆盖。
你可以看看 专业图形用户界面 我们使用他们的类库来调整对话框控件的大小。我认为这是他们免费版本的一部分。
我们使用 CodeGuru 中的 CResize 类来自动调整所有控件的大小。您告诉您希望如何调整每个控件的大小,它就会为您完成工作。
调整大小范例是指定当调整对话框大小时控件的每一侧将移动多少。
SetResize(IDC_EDIT1, 0, 0, 0.5, 1);
SetResize(IDC_EDIT2, 0.5, 0, 1, 1);
当您有大量对话框控件时非常方便。
这也是来自 CodeProject 的免费解决方案
http://www.codeproject.com/KB/dialog/dlgresizearticle.aspx
它只是一组简单的宏,用于在对话框调整大小时定位控件。
编辑 - 按照OP的评论。我不知道 MFC 是否有像 QT/WX 这样的通用 sizer 支持,它似乎也不存在于像 Winforms 这样的新框架中。
它在 QT/WX 中,因为它对于多平台是必要的,其中小部件可能具有不同的大小,这解释了 MS 缺乏它。但它对于多语言端口也至关重要,例如。其中表示取消的德语长度为 30 个字符。