首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在支持DPI的win应用程序上缩放标题栏?

如何在支持DPI的win应用程序上缩放标题栏?
EN

Stack Overflow用户
提问于 2015-08-03 15:34:48
回答 4查看 3K关注 0票数 19

我通过在清单文件中设置<dpiAware>True/PM</dpiAware>,使我的应用程序能够识别每个监视器的dpi。我可以使用process explorer验证这是否确实有效,或者调用GetProcessDpiAwareness。

这一切都运行得很好,我可以在我的代码中很好地缩放客户端区中的任何内容。然而,我唯一的问题是,如果我将我的应用程序从系统dpi监视器拖到非系统dpi监视器上,标题栏和任何系统菜单都会变得太大或太小。这不是大多数内置应用程序的情况(例如calc、edge browser等)。因此,必须有适当的扩展。有人知道微软的开发人员是怎么做到这一点的吗?

下面的截图应该能更好地解释我的问题。还要注意,close、min和max按钮之间的填充在缩放时是不同的(96dpi)。

Sample app我附加了一个非常简单的应用程序,这是每个显示器的dpi感知。

EN

Stack Overflow用户

发布于 2016-08-03 03:52:56

更新:

在清单中添加新的<dpiAwarness>声明就足以解决所有这些问题。here就是一个例子。

以前调查的残留物(过时):

对这个问题进行更多的调查。

系统设置:两个显示器,一个是96 dpi,另一个是267 dpi (Microsoft Surface 4)。

测试窗口移至辅助96 dpi显示器:

下面是在清单中使用<dpiAware>true/pm</dpiAware>进行渲染(错误,IMO):

注意标题栏的巨大尺寸和错误的窗口图标大小。

下面是使用<dpiAware>true</dpiAware>进行的正确渲染

我怀疑MSDN文档对PROCESS_DPI_AWARENESS的价值有明显的误导性。我看不出<dpiAware>true</dpiAware><dpiAware>true/pm</dpiAware>在消息和样式上有什么不同。后者只是让标题变得更大。在这两种情况下,应用程序在具有不同DPI的监视器之间移动时都会收到WM_DPICHANGED消息。

叹一口气。

票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31781767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档