【问题标题】:Setting DPI awareness level dynamically in win32 Application在 win32 应用程序中动态设置 DPI 感知级别
【发布时间】:2015-01-19 10:35:27
【问题描述】:

我正在寻找动态设置 DPI 感知级别的任何方法(基于用户输入)。我遇到了this

它建议我应该使用setProcessDpiAwareness 函数来设置意识级别。但仅 Windows 8.1 预览版支持此 api 调用。是否有任何其他方法可以用于动态设置从 Windows 7 开始支持的 Dpi 感知级别?

提前致谢。

【问题讨论】:

  • SetProcessDPIAware() 从 Vista 开始可用。 Win81 刚刚添加了每个显示器的 DPI 皱纹。必须在创建任何窗口之前调用它,因此“用户输入”并不是一个绝妙的主意。
  • @Hans SetProcessDpiAwarenessSetProcessDpiAware 不同。

标签: c++ windows winapi dpi


【解决方案1】:

在 Windows 8.1 中出现每显示器 DPI 感知之前,有 SetProcessDPIAware,从 Vista 开始支持。

但是,您可能希望在运行时做出此决定,这让我觉得非常不寻常。最佳做法是应用程序设计为具有高 DPI 感知能力,并将感知写入应用程序清单。

【讨论】:

  • 感谢您的回复。但是文档说“SetProcessDPIAware 可用于要求部分中指定的操作系统。它可能会在后续版本中被更改或不可用。相反,请使用 SetProcessDPIAwareness。”这看起来有点不安全。我想要更安全的一面。
  • 我目前正在使用清单方法。但是有很多资源(字体,控件,图形..等)。如果应用程序不适合用户,我想使用 DWM 缩放。所以我想将动态 dpi 感知设置为 false 以允许 DWM 缩放。
  • 如果您不想要 dpi 感知,那么不要表明您的应用程序是 dpi 感知的。无需在运行时调用函数。
  • 至于您的第一条评论毫无意义。您明确询问了在 Windows 7 上使用什么功能。好吧,那里没有 SetProcessDPIAwareness。在 Windows 7 上,您有 SetProcessDPIAware。就是这样。在 8.1 及更高版本上随时致电 SetProcessDPIAwareness,在早期版本上回退至 SetProcessDPIAware。当然,我只是从清单中删除 dpi 感知部分。
  • 在这种情况下,如果用户的参数允许 dpi 感知,我将从清单中删除 dpi 感知并通过在启动时调用 SetProcessDPIAware 来启用它。
猜你喜欢
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
相关资源
最近更新 更多