易语言组件字体属性的陷阱
陷阱 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.
评论
熟悉的让人心疼
发表评论