没有收到WM_DPICHANGED通知

时间:2015-08-20 10:36:32

标签: c winapi dpi multiple-monitors

我有一个Win32应用程序,我已经实现了groupWndProc()回调,我收到的通知除了WM_DPICHANGED

我连接了两台显示器:一台普通显示器和一台4k显示器。我希望在将应用程序从一台显示器移动到另一台显示器时收到通知。

1 个答案:

答案 0 :(得分:4)

使用SetProcessDpiAwareness Process_Per_Monitor_DPI_Aware确保您的流程可以识别DPI,并且根据the tutorial on msdn,您必须在创建Windows之前调用此流程。在查询时确保您的监视器使用GetDpiForMonitor返回不同的dpis。

供参考,请查看High DPI Reference

或者将应用程序清单设置为per this tutorial。将dpiAware元素添加到应用程序清单中:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>True/PM</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>

并确保您的编译器包含清单:将清单文件添加到项目属性 - &gt;配置属性 - &gt;清单工具 - &gt;额外的清单文件。