5

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

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

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

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

4

3 回答 3

3

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

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

  • 重新设计您的 GUI 以使用 SDI 或 MDI GUI。
  • 使用对话框调整大小扩展。有很多可用的,对于一些非常好的建议,请参阅这个问题。另一种选择是这个这个
  • 不要使用 MFC。wxWidgets 对对话框调整大小有更好的支持。
于 2009-06-26T03:36:16.393 回答
2

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

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

我很幸运可以调整我的窗口大小,这样屏幕更大的人可以立即看到更多信息。您需要以艰难的方式做到这一点,响应窗口的 WM_SIZE 消息并决定哪些控件应该变大,哪些应该移动。

于 2009-06-26T04:26:52.120 回答
1

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

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

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

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

于 2009-06-26T03:57:36.820 回答