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

Visual c++ 设计一个适用于所有分辨率的MFC应用程序?,visual-c++,mfc,scaling,resolution,Visual C++,Mfc,Scaling,Resolution,我目前正在为Windows设计我的第一个GUI。我正在使用MFC和VisualStudio2008。我一直在设计程序的监视器的本机分辨率为1680x1050。如果我编译并将我的程序发送给我的一位同事在他们的电脑上运行(通常是运行1024x768的笔记本电脑),我的程序将无法显示在他们的屏幕上 我一直在努力阅读如何设计MFC应用程序,使其能够在所有分辨率下运行,但我不断发现误导性信息。无论我在哪里看到,似乎DLU都应该为您调整应用程序的大小,而您唯一应该遇到问题的时候是当您有一个需要担心其分辨率的

我目前正在为Windows设计我的第一个GUI。我正在使用MFC和VisualStudio2008。我一直在设计程序的监视器的本机分辨率为1680x1050。如果我编译并将我的程序发送给我的一位同事在他们的电脑上运行(通常是运行1024x768的笔记本电脑),我的程序将无法显示在他们的屏幕上

我一直在努力阅读如何设计MFC应用程序,使其能够在所有分辨率下运行,但我不断发现误导性信息。无论我在哪里看到,似乎DLU都应该为您调整应用程序的大小,而您唯一应该遇到问题的时候是当您有一个需要担心其分辨率的实际位图时。但如果是这样的话,为什么当我将显示器设置为较低分辨率时,我的程序将不再适合我的屏幕?我的程序不再“收缩”以占用1680x1050所使用的相同数量的屏幕空间,而是变得巨大而粗糙

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


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

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

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

  • 重新设计GUI以使用SDI或MDI GUI
  • 使用对话框调整扩展名。有很多可用的建议,有关一些非常好的建议,请参阅。另一个选择是和
  • 不要使用MFC。wxWidgets对对话框大小调整有更好的支持

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

      选项1。 如果您是为客户开发应用程序,请选择一个最小分辨率(如1024x7678),重新设计对话框,使所有内容都适合您。可以将一些拆分为多个,或者使用tab strip控件

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

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

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

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


      我很幸运地使我的窗口可以调整大小,这样屏幕更大的人可以一次看到更多的信息。您需要以艰难的方式完成此操作,对窗口的WM_大小消息做出响应,并决定哪些控件应该变大,哪些控件应该移动。

      为了插入另一个链接,Joseph M.Newcomer(MS MVP)写了一篇关于调整MFC对话框大小的文章。看一看:不幸的是,我已经在使用选项卡控件了。我可能需要减小字体大小,因为1024x768上的字体太大了。。。尽管在1680x1050上,它的尺寸刚好合适:/默认的对话框字体已经很小了。您是否选择了默认字体以外的字体?