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 布局的主要内容,如果未能解决你的问题,请参考以下文章