使用MFC创建GUI

时间:2009-04-15 13:28:31

标签: user-interface mfc

我最近开始学习MFC(Prosise book),我觉得这很难。但最困难的部分似乎是创建用户界面。看起来您必须知道控件应该定位的位置(而不是基于对话框的应用程序的情况)。

你如何解决这个问题?您是先在Photoshop中绘制应用程序,然后测量那里的距离吗?

此外,还有任何GUI设计师吗? (缓解疼痛)。 我非常喜欢它,特别是因为速度和它不需要大框架的事实。

任何经常进行MFC编程的人都欢迎向我提供有关如何擅长编程MFC的建议。

11 个答案:

答案 0 :(得分:5)

我必须同意,对于MFC工作,作为Visual Studio一部分的资源编辑器可能是使用MFC的最简单方法。您可以将控件放在对话框上并将它们拉伸到适当的比例。为了记录,MFC 一个框架,只是它作为Windows的一部分捆绑在一起。

如果您希望控件调整大小,则需要添加一些代码来处理调整对话框大小时传递的调整大小(我认为是ON_SIZE)消息。只要你不想一次调整/重新定位太多东西,这就不算太糟了。

就个人而言,我建议避免使用MFC而使用WxWidgets。有一些很棒的GUI布局程序,如wxDesigner,可以轻松创建可调整大小的对话框和属性页。

答案 1 :(得分:5)

MFC很简单,当你继续保持它应该做的界限时(基本的Doc / View,对话框,没有花哨的糖果UI ......);一旦你需要扩展基本行为,它就会变得越来越难。

答案 2 :(得分:3)

IMO是一个痛苦的MFC。除非你需要用c ++编程,否则我建议使用带有WPF或WinForms的C#。这更容易。如果你需要使用c ++,那么有更好的GUI解决方案,比如Qt。

答案 3 :(得分:3)

我使用MFC超过10年。它还不错,只要你对在其他平台上运行你的应用程序不感兴趣,我就推荐它在其他非Microsoft框架上。如果您希望您的应用程序看起来像一个对话框,那么使用像Aardvark建议的CFormView并使用对话框编辑器进行布局。在很多我的MFC程序中,视图是CListViews或类似于左侧有一个树的应用程序的浏览器,右侧是ListView。我们经常使用的另一个是具有选项卡控件和属性页的通用CView。在那些,你没有布局问题。您只需创建控件并将它们定位在距边缘预定距离处。繁荣非常好。这就是让我继续使用MFC的原因。查看CodeProject.com以获取扩展MFC的一些类,例如,调整对话框和属性表的大小。 布赖恩

答案 4 :(得分:2)

典型的MFC应用程序有一个顶级框架窗口和一些子视图窗口和控制栏。虽然有时需要在构造期间指定初始尺寸,但通常不需要手动定位这些东西。您可以使用Visual Studio的对话框编辑器来布局对话框。手动编写定位代码应该非常罕见。

答案 5 :(得分:2)

您使用的是哪个版本的Visual C ++?我使用的所有版本都带有一个非常好的图形工具,用于放置和编辑GUI组件。我通常会添加所需的基本组件,为它们编写一些代码,看看它们看起来如何,然后在我找到一个并添加其他组件之前,尝试不同的布局。

即使我多年来一直在编写MFC应用程序并且非常喜欢它,但我不得不同意那些问你为什么要学习困难的海报。这些天你可能会更好地利用你的时间学习C#或Java。

答案 6 :(得分:2)

MFC应用程序可能变得非常繁琐(例如,大型应用程序可执行文件大小,内存占用空间和/或要求运行时DLL与您的应用程序一起使用)。如果您专注于C ++,我建议改为查看WTL(曾经是Microsoft库,但它现在在SourceForge上)。对于具有类似语法的MFC,它是一种非常轻量级的替代方法(使用模板)。

最近我已经放弃了C ++ for Java用于我的大多数应用程序,包括GUI,我不打算回去。

答案 7 :(得分:2)

如果您希望MFC应用程序中的对话框的布局功能从 CFormView 派生您的CView类。这应该看起来很像.NET WinForms,VB6等基于“表单”的GUI ......

这可以通过新的应用程序向导在Generated Classes'Base Class下拉部分(我在VS 2008上检查过)下完成。

您也可以创建一个基于对话框的应用程序 - 您似乎已经熟悉它了。

还有其他几个CView派生类提供了其他方法来设计应用程序的“视图”。使用默认CView作为基类(默认情况下为向导创建)假设您将手动创建“控件”和/或绘制屏幕。绘画(实际上用GDI绘制显示)是老式的Win32开发人员熟悉的东西,但往往从未在更现代的框架中完成。

答案 8 :(得分:1)

很多时候您使用对话框资源编辑器和数据绑定来在MFC中创建UI(您可以使用基于对话框的视图)。如果你没有创建一个对话框,那么通常你会想到一些算法来控制布局,并实现它。

答案 9 :(得分:1)

使用MFC可以获得出色的结果,而无需添加任何其他框架。 这是我创建的实用程序的example

答案 10 :(得分:-2)

在GUI目的中寻找QT。我相信你会喜欢它..........