MFC 的网格、flexgrid 或 gridbag 布局

Posted

技术标签:

【中文标题】MFC 的网格、flexgrid 或 gridbag 布局【英文标题】:Grid, flexgrid, or gridbag layout for MFC 【发布时间】:2010-11-04 18:56:47 【问题描述】:

MFC 似乎严重缺乏布局管理器/大小调整器。很难相信任何自尊的 UI 库都会缺少 sizer,但你去吧。我找到了一些可以很好地处理通常的盒子布局的东西,但是我还没有找到一个尺寸调整器,当你需要在它们展开时垂直和水平对齐时会有所帮助。

我从这里获得了大部分信息:

layout manager for MFC dialog apps

我搜索了网络,每次搜索 MFC 和 grid/anything/ 最终都会将我发送到一堆网格小部件,而不是 sizer。哪里有这样的事?

【问题讨论】:

很难从两个都说没有的答案中挑选。他们都是正确的。 选了第一个说的人:p 【参考方案1】:

几年前我在使用 WTL 时遇到了这个“问题”。我厌倦了过于复杂的 WM_SIZE 处理程序,所以我硬着头皮实现了一些布局容器,并将 Win32 控件和我自己的一些控件适配到布局容器中。

我基本上为每个控件创建了子类,并为“MinSize、MaxSize、PreferredSize”实现了我自己的协议。有些控件很难实现,但没有什么是不可能的。做起来并不难,所以你可能想考虑一下并去做。 MFC 在子类化方面不如 ATL/WTL 灵活,但足够灵活。

很遗憾,我无法与您分享代码。 :/ 我什至在上面添加了一个简单的 XML 标记语言,非常棒。

【讨论】:

有没有机会同时分享代码或者至少分享你的方法?在自己解决问题之前可能会有所帮助。【参考方案2】:

我也没有听说过适合 MFC 的功能齐全的 sizer 库。而且我认为没有什么比该链接问题中提到的选项更好的了。

在我的意见中,我怀疑在这一点上是否会做出任何这样的事情。其他成熟的 GUI 框架已经默认集成了适当的 sizer 功能,同时也弥补了 MFC 的许多其他缺陷。我想很多人会说现在为MFC开发这样的东西不值得。 (我什至曾经开始研究一种可以应用于 MFC 的通用尺寸库,但最终失去了雄心并将其搁置一旁。)

此外,我觉得 Microsoft 自己已将 MFC 视为遗留问题,转而倾向于使用 .NET/C#/WPF 进行 GUI 开发。毕竟,看看这些新技术在过去 10 年左右的时间里取得了多大的进步,而与此同时,除了偶尔添加一个功能包之外,MFC 几乎没有变化。

如果可行,我建议考虑迁移到更现代的 C++ 框架(例如 Qt)或 .NET/C#/WPF(至少对于应用程序的 GUI 部分)。

【讨论】:

我可能会同意你的切换,但我已经建议从不同的框架 (WX) 切换,因为我们遇到了主要由该库的跨平台性质引起的问题。 MFC 中的对接库也更好。我必须向上级推荐,我需要诚实地这样做,然后他们才能决定。现在,MFC 看起来是最不麻烦的选择,我可能会被它卡住。不过,我的团队中确实有一名成员正在研究该选项。

以上是关于MFC 的网格、flexgrid 或 gridbag 布局的主要内容,如果未能解决你的问题,请参考以下文章

MFC 列表控件滚动显示额外的网格线

调整 MFC 网格控件的大小以适应对话框?

MFC 网格是绝对布局,在调整窗口大小时会被剪裁

MFC 功能包 - 如何更新属性网格控件

MFC 有内置的网格控件吗?

Flex网格和背景图像并排响应/缩放问题