草庐IT

Windows 应用程序 - DPI 问题

coder 2023-11-11 原文

我们现有的一个基于 Win32 MFC 的应用程序出现问题。它无法在使用高 dpi 设置的显示器上正确呈现。更具体地说,在选择了 120 dpi 的 Windows XP 中,应用程序中有几个地方会放大文本,但不会放大它们的容器(文本溢出按钮的边界等)。 This also occurs in Windows 7 (and Vista) when >96 dpi is selected and "use XP style dpi scaling"is selected.如果未选择 xp 样式缩放,则我知道 Win7 改为使用 DPI 虚拟化。使用 DPI 虚拟化时,一切看起来都很好(好吧,事情是模糊的,但至少它们是正确的)。默认情况下,在 Win7 120 dpi 中使用 xp 样式缩放,而下一个设置 (144 dpi) 则不使用。所以我们的应用程序在 144 dpi 下看起来是正确的,但在 120 dpi 下看起来是错误的。

如果我编辑应用程序 list 以将应用程序声明为“DPI 感知”,那么这将转向 DPI 虚拟化(但不是 XP 样式的 dpi 缩放),这让我无处可去。事情看起来仍然很糟糕(120 dpi 没有变化,144 dpi 现在坏了)。

我需要解决这个问题,我已经尝试通读有关 DPI/缩放比例的一般问题,这是一次学习经历。到目前为止,我还没有找到合适的解决方案。目前我无意进行彻底和正确的修复(应用程序根据 dpi 正确缩放所有元素)。这将涉及大量重写。我认为确实有两种可能的解决方案。一个是一起关闭任何类型的 DPI 缩放。这意味着如果用户的 Win7 系统设置为 120 dpi,那么他们系统上的所有内容看起来都不错/很大,但我们的应用程序看起来是正确的,但与其他应用程序中的其他内容相比会很小。第二个解决方案是如何强制我们的应用程序使用 DPI 虚拟化,但从不使用 XP 样式的 dpi 缩放。我希望这是一个应用程序方面的更改,而不是依赖于最终用户必须进行 Windows 配置更改。

到目前为止,我还没有找到一种方法来完成这两种解决方案。

能否请对此主题有更多了解的人回答并指出正确的方法?

谢谢

最佳答案

您不能在 120 DPI 设置上强制执行 DPI 虚拟化。我自己对产品进行了调查,因为在高 DPI 下呈现模糊外观似乎是一个很好的权衡。

我们最终完全重写了 UI 定位和缩放,以使其在高 DPI 设置下通过字体缩放正确缩放。客户端现在完全了解 DPI 并在任何 DPI 设置中正确缩放。

在我们的案例中,对于一个非常复杂的客户,正确完成这项工作花了一个人大约 3 个月的时间。

我们有一个从未尝试过的次要计划,但它可能适合您: 在启动时读取操作系统的 DPI 比例因子。然后按此系数减少您拥有的所有字体实例,以便当 Windows 再次放大字体时,它们会回到 UI 适合它们的大小。当然,具有高 DPI 设置的用户不会在您的应用程序中获得更大的字体,但至少可以使用。

关于Windows 应用程序 - DPI 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8000051/

有关Windows 应用程序 - DPI 问题的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  3. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  4. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  5. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  6. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  7. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  8. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  9. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  10. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

随机推荐