Windows C ++对话框调整程序类

时间:2020-03-06 14:49:59  来源:igfitidea点击:

我正在寻找一个非常好的对话框缩放器类,该类将在调整屏幕大小时根据需要拉伸和收缩单个项目。斯蒂芬·凯尔(Stephan Keil)有一个不错的工具(DlgResizeHelper),它基本上按设定的比例调整所有内容的大小,但我正在寻找更智能的东西。

例如:

  • 图标不应调整大小
  • 单行文本框不应垂直拉伸
  • 按钮可能应该保持相同的大小

基本上,我正在寻找可以查看所有控件的东西,弄清楚一个静态文本字段与该控件的下一个/下一个相关,并将二者锚定在一起,并以"智能"方式调整大型控件的大小,以便它看起来好的。

那里有这样的框架吗?我一直在努力,但现成的东西可能会更好。

跟进:我正在寻找建议的解决方案。他们中的许多人都要求我们锚定对话框上的每个控件。我正在寻找一种聪明的方法,可以弄清楚锚点应该是什么,并能够在猜测错误的情况下手动锚定。似乎应该是可能的-大多数人都同意将编辑字段旁边的静态文本字段锚定在一起。猜猜我几乎要在这里寻找一点AI了:)

解决方案

Ultimate Toolbox MFC库(在CodeProject上位于此处)包括一个布局管理器。我还没有亲自使用过它,但是看起来它确实可以满足要求。

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

根据操作注释进行编辑。我不知道有像MFC的QT / WX这样的通用大小调整程序支持,它似乎也没有出现在Winforms这样的新框架中。
之所以在QT / WX中,是因为对于多平台而言,小部件的大小可能有所不同是必要的,这说明了MS的不足。但这对于多语言端口也至关重要,例如。其中要取消的德语为30个字符长。

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

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

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

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

我们使用CodeGuru中的CResize类自动调整所有控件的大小。我们告诉我们如何调整每个控件的大小,并为我们完成工作。

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

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

当我们有大量对话框控件时,非常方便。

源代码

我已经尝试了很多,最后还是选择了http://www.codeproject.com/KB/dialog/layoutmgr.aspx。但是,它不会执行我们建议的"智能"布局。我从未见过在任何库中,在任何平台上都看不到它如何工作,而如果没有很多幕后魔术,这些魔术无论如何都必须被重写一半。