设为首页 收藏本站

NSIS中文论坛

查看: 713|回复: 4

[求助] 如何开发dpi适配的安装程序

[复制链接]
  • TA的每日心情
    奋斗
    2017-9-12 22:53
  • 签到天数: 2 天

    [LV.1]初来乍到

    10

    主题

    34

    帖子

    216

    积分

    积分
    216
    QQ
    发表于 2018-3-7 09:44:05 | 显示全部楼层 |阅读模式
    如题。

    没有思路,是在设置尺寸的时候把窗口、控件尺寸都按比例调大吗?大家谁有经验,指导一下。

    谢谢。
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    146

    帖子

    746

    积分

    积分
    746

    NSIS元老

    发表于 2018-3-7 10:44:21 | 显示全部楼层
    这个是系统控制的,不需要你人工控制。系统会放大的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-9-12 22:53
  • 签到天数: 2 天

    [LV.1]初来乍到

    10

    主题

    34

    帖子

    216

    积分

    积分
    216
    QQ
     楼主| 发表于 2018-3-7 11:56:16 | 显示全部楼层
    本帖最后由 枫哥不小心 于 2018-3-7 11:58 编辑
    jiake 发表于 2018-3-7 10:44
    这个是系统控制的,不需要你人工控制。系统会放大的。

    关键是我窗口背景和部分控件贴图了。
    现在出现的问题是125%时字体放大了,但是窗口和控件没有变大,所以字体会显示不全。(如果我自己调用createfont,字体不会变大,但是在高清分辨率上就会非常小,很难看清楚)
    150%时窗口会跟着变大,但是会变模糊。就像QQ音乐这样子。C:\Users\Administrator\Desktop\qqmusic.jpg
    qqmusic.jpg
    但是有的软件窗口、控件、图片是可以随着DPI值按比例增大的,而且非常清晰。
    我想知道是怎么实现的。是根据系统不同的DPI值把控件、窗口的尺寸都按比例调大吗?(比如DPI是96时创建100px*80px的窗口,在DPI是144时就对应创建150px*120px窗口,然后贴图分别贴对应像素的图)这是旁门左道还是必须要这么做(因为感觉很麻烦)。
    如果这样的话,是不是首先必须禁用掉系统的DPI虚拟化。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    146

    帖子

    746

    积分

    积分
    746

    NSIS元老

    发表于 2018-3-14 00:04:35 | 显示全部楼层
    枫哥不小心 发表于 2018-3-7 11:56
    关键是我窗口背景和部分控件贴图了。
    现在出现的问题是125%时字体放大了,但是窗口和控件没有变大,所以字 ...

    自定义界面的话,适应 DPI 的确是一个大问题,微软自己都没做好。如果是系统的窗口,的确系统自己会适配的比较完美,这个你应该是知道的。如果是第三方的,难度略大。有些 DirectUI 库指定尺寸和字号都是绝对值,与 DPI 无关的。如果想做到自动适配,感觉自己实现起来难度还是大。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-9-12 22:53
  • 签到天数: 2 天

    [LV.1]初来乍到

    10

    主题

    34

    帖子

    216

    积分

    积分
    216
    QQ
     楼主| 发表于 2018-3-19 23:09:17 | 显示全部楼层
    jiake 发表于 2018-3-14 00:04
    自定义界面的话,适应 DPI 的确是一个大问题,微软自己都没做好。如果是系统的窗口,的确系统自己会适配 ...

    调用GetDeviceCaps(LOGPIXELSX)获取当前dpi,记为iDpi,然后用createwindow(...,RECT(x, iDpi, 96),MulDiv(y, iDpi, 96),MulDiv(cx, iDpi, 96),MulDiv(cy, iDpi, 96)),..)字体也类似,目前可以解决不开启虚化(Bitmap-stretching)的情况。如果开启Bitmap-stretching这种方式就会失效,这种情况感觉必须得修改manifest了,这是不是只能重新编译NSIS呢?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|联系我们|NSIS中文论坛    

    GMT+8, 2018-12-19 04:58 , Processed in 0.026141 second(s), 17 queries , MemCache On.

    Powered by Discuz!X3.3

    Copyright © 2015-2018 NSIS中文论坛

    快速回复 返回顶部 返回列表