资源介绍:
兼容高DPI是个困难的活儿,除非你是用的WPF写界面,其他编程语言都很麻烦(特别是易语言,原生窗体基本别想兼容了。。)
如果自己的程序不针对高DPI做修改,轻则出现界面显示模糊,重则界面显示错乱、文字超出边界。为了让自己的程序能凑合用,我才搞了这个“强行兼容”高DPI。
什么叫“强行兼容”呢?如果是正常兼容,那界面尺寸应该有所放大,放大后依然能正常显示。我这个,只是告诉系统:“我自己能处理高DPI,你别插手捣乱”,但是实际上啥也没做。实际效果就是,界面尺寸跟96DPI(100%缩放)时一样,几乎所有界面都能正常显示(已知简单超文本框有问题)。弊端就是界面显示略小,如果用户屏幕分辨率太高(如2K、4K分辨率),则可能会看不清界面。
毕竟强行兼容嘛,先保证能用,至于用得舒服不舒服,那以后再慢慢说~(等我有高DPI显示屏再说。。。)
我这个代码就是做了两件事:
hook GetStockObject,如果参数为DEFAULT_GUI_FONT,就返回固定的9号宋体(避免xp风格的字体缩放导致文字显示溢出)
调用SetProcessDPIAware告诉系统我自己能处理高DPI(禁用DPI虚拟化)
由于SetProcessDPIAware需要在所有界面显示前调用,所以我直接做到了模块的“_启动子程序”里,只要引入模块就会自动调用。
是的,使用方法就是如此简单,只要引入模块即可,不需要调用任何模块函数(模块里也没有能调用的函数)。
效果如下:
引用的strawhat模块出自“草帽变速齿轮”,很早之前在易语言论坛下载的,抱歉时间太久找不到原帖地址了。也可以用其他任意hook模块代替。
资源作者:
淡到仿若无物
资源下载:
易语言dpi文字
易语言DPI速度