设计一个适用于所有分辨率的MFC应用程序?

时间:2009-06-25 22:12:00

标签: visual-c++ mfc scaling resolution

我目前正在为Windows设计我的第一个GUI。我正在使用MFC和Visual Studio 2008.我一直在设计我的程序的显示器具有1680x1050原始分辨率。如果我编译并将我的程序发送给我的一个同事在他们的计算机上运行(通常是一台运行在1024x768的笔记本电脑),我的程序将不适合他们的屏幕。

我一直在尝试阅读如何设计MFC应用程序,以便它可以在所有分辨率上运行,但我一直在寻找误导性的信息。在任何地方,我看起来似乎DLU应该为您调整应用程序的大小,并且您唯一应该遇到的问题是当您有一个实际的位图,您需要担心它的分辨率。但如果是这种情况,当我将显示器设置为较低分辨率时,为什么我的程序不再适合我的屏幕?而不是我的程序“缩小”占用它在1680x1050使用的相同数量的屏幕空间,它变得巨大和颗粒状。

这里的“明显”解决方案是将我的分辨率设置为1024x768并重新设计我的程序以适应屏幕。除了我已经在我的对话框中尽可能地压扁所有内容以尝试让我的程序适合在1024x768的屏幕上运行。我的对话框字体设置为Microsoft Sans Serif 8,但在1024x768下运行时仍然显得很大(远大于8个点)。

我知道有一种方法可以使我的程序保持相同的缩放......对吗?或者这是解决问题的错误方法吗?设计MFC程序的正确/标准方法是什么,以便它可以运行多种分辨率,比如800x600及以上?

3 个答案:

答案 0 :(得分:2)

我假设你的应用程序GUI是基于对话框的(主窗口是一个对话框)?

在这种情况下,您遇到了问题,因为正如您所发现的那样,MFC不支持正确调整对话框的大小。您的选择是:

  • 重新设计GUI以使用SDI或MDI GUI。
  • 使用对话框调整大小扩展名。有许多可用,对于一些非常好的建议,请参阅this question。另一个选项是this onethis one
  • 请勿使用MFC。 wxWidgets对对话框大小调整有更好的支持。

答案 1 :(得分:2)

MFC只是Windows API的一个瘦包装器。它们都做出了一个几乎不可能的假设:如果你有一个更高分辨率的屏幕,你将在Windows中调整DPI或字体大小以获得更大的字符。大多数情况下,更大的屏幕尺寸意味着更大的物理显示器,或者笔记本电脑,您希望尽可能多地将信息挤入小屏幕;人们更重视细节。因此假设失败了。

如果您无法将整个UI压缩到需要支持的最小尺寸屏幕,那么您必须找到另一种方法来缩小它。在不了解您的UI的情况下,我可能会建议使用标签将控件分组到页面中。

我运气好,我的窗户可以调整大小,所以屏幕较大的人可以一次看到更多信息。您需要以艰难的方式执行此操作,响应WM_SIZE消息到窗口并确定哪些控件应该更大,哪些控件应该移动。

答案 2 :(得分:1)

当分辨率更改时,没有自动方法可以调整对话框内容的大小。所以,你需要设置一些边界。

选项1。 如果您正在为客户开发应用程序,请选择一个最低分辨率(如1024x7678),重新设计对话框以使一切都适合。也许可以分解成几个,或使用标签条控制。

选项2。 为您要支持的每个分辨率创建单独的对话框表单,但使用相同的类来处理它。在运行时检测分辨率并使用适当的表单。

选项3。 编写自己的调整大小功能,以便用户可以根据自己的喜好调整对话框的大小。