监视器和系统DPI的分辨率与WPF分辨率独立性之间的区别是什么 改变两者之间的内容使WPF中的窗口大小相同,这在User32中是不可能的? 修改 我正在阅读的书“C Sharp中的Pro WPF”说如果我们在96 DPI中创建1英寸按钮然后将DPI更改为120,由于像素密度更高,按钮会变小(在winforms中)。但是我试过了,我可以看到,在这两种情况下,按钮大小保持不变!
为什么会这样?
答案 0 :(得分:0)
实际上,所谓的WPF解析独立性并不能让你在Win32之前做任何你以前做不到的事情。只是之前它还有很多工作要做。所以这里唯一真正的变化就是开发工作 - 基本能力没有变化。 (实际上,WPF中的所有内容都是如此。如果你有多年的开发时间,你可以通过直接针对DirectX API进行编程来完成WPF所做的一切......)
WPF会自动考虑名义DPI配置。在Win32中,如果你希望你的应用程序对名义DPI敏感,你必须编写额外的代码来实现这一点,如果你想避免像文本被一些DPI裁剪的问题,你必须处理各种可怕的布局问题。 (虽然现在我们在.NET 4中使用GDI32样式的文本呈现,但您可以选择回到WPF应用程序中的所有这些问题......)
所以问题的答案基本上是:没有区别。 WPF使得考虑DPI变得容易得多,但它不会在这里启用任何新的行为。
从根本上说,WPF遇到与传统Win32应用程序完全相同的问题,原因很简单,因为它可以访问与经典Win32应用程序完全相同的信息。正如在这里讨论的其他答案中链接的页面一样,Windows通常不知道DPI到底是什么。大多数时候它会告诉你显示器是96dpi。好吧,我的计算机上连接了3个屏幕,而且所有这些屏幕都报告了96dpi,即使它们都不是真正的96dpi,而且它们实际上甚至都没有相同的dpi。
底线是:Windows通常不知道屏幕的真实DPI是什么。 WPF没有办法解决这个问题。如果有一种方法让WPF发现真正的DPI,Win32应用程序也能够发现它。