易语言组件字体属性的陷阱

作者:一年又一年 分类: 易语言 发布时间:2019-2-25 22:12 3336 次浏览 1 条评论

陷阱 1:

当你在易语言 IDE 的窗口属性栏里对组件设置字体字号时:

你选择了一款字体,字体大小为 9 号。

❌ 你以为易语言会做的事情:

  • 存字号,也就是存数字 9.

✔ 易语言实际做的事情:

  • 按照当前的 DC_DPI[1],计算并存这个字号所对应的逻辑大小[2],9 号在 96 DPI 下的逻辑大小是 -12 (0xfffffff4),在 101 DPI 下的逻辑大小 -13 (0xfffffff3).

[1] DC_DPI 指:对屏幕 DC 取 GetDeviceCaps 得到的 LOGPIXELSX/LOGPIXELSY[3].
[2] 逻辑大小的计算方式是 -MulDiv(fontSize, DC_DPI, 72),MulDiv(a, b, c) 等价于 四舍五入(a*b/c).
[3] 通常该值为 96,但笔者的桌面环境设置了自定义缩放,缩放比例是 105%,因为这个比例较小,Windows 不会对不支持 DPI 缩放的程序强行拉伸缩放,而是通过类似调整屏幕 DC 的 DPI 到 96*缩放系数(96*105%=101,即对应的 DPI 为 101),以使得这些程序能在不变模糊(blurred)的情况下,略微增大界面所呈现的字体大小(在此环境下,即便是不支持 DPI 缩放的程序,运行时所有线程默认的 DPI Awareness 都被自动设置为 DPI_AWARENESS_PER_MONITOR_AWARE).


陷阱 2:

当你的易语言程序在运行时对组件设置字体字号时:

.. To be continue.

♥ 若您欲转载敝站的原创内容,还请您附注出处及相应链接

评论

  1. Avatar of BeiDou
    BeiDou 2020-08-02 01:35 回复

    熟悉的让人心疼

发表评论

* 标注的项目为必填项。

您的邮箱地址将不会在页面中公开
您的站点地址将会被检查,如被认为不适则可能被移除
Ɣ回顶部