windows - LoadCursor 和混合 DPI 多显示器
问题描述
当该LoadCursor
函数用于从资源加载游标时,结果HCURSOR
可以在不同的监视器上使用,并且始终以正确的大小显示。
即:通常:
- 在 96 dpi 显示器上使用 32x32 资源,
- 在 192 dpi 显示器上使用 64x64 资源。
但是,当从内存以编程方式创建游标时(例如使用LookupIconIdFromDirectoryEx
and CreateIconFromResourceEx
),生成的游标具有固定的分辨率。这意味着它在混合 DPI 多显示器设置中的至少一台显示器上以错误的尺寸显示。
我还检查了LoadCursorFromFile
它,它也提供了这种动态分辨率行为,例如LoadCursor
.
有没有办法以编程方式创建一个游标,该游标根据显示在哪个监视器上动态切换?加载的光标以不同的方式工作在幕后发生了什么魔力LoadCursor
?
解决方案
经过大量实验,我终于发现 WPF 可以从资源和内存流中加载游标,并在scaleWithDpi
使用该选项时获得正确的 DPI 行为:
public Cursor(Stream cursorStream, bool scaleWithDpi)
查看参考源,它最终出现在函数中,该函数LoadFromStream
通过将流写入临时文件并从文件中加载来加载流。 见源
总结一下:
- 似乎获得像这样的动态 DPI 光标的唯一方法是使用 Win32 本机资源加载函数并从文件加载。您似乎无法使用此行为直接从内存中加载游标。
- 此行为的“动态 dpi”部分似乎与
LR_DEFAULTSIZE
传递给LoadImage
函数的标志有关。
推荐阅读
- binutils - elfnn是什么意思-
.c 和 elfxx- .c 在 binutils/bfd 中? - navbar - 无论 blazor 中的窗口大小如何,如何使导航栏切换始终可见
- php - CodeIgniter 如何进行多用户登录
- python - AttributeError:“OWM”对象没有属性“weather_at_coords”
- php - 从 php 函数调用存储过程
- excel - 在 excel 中,如何根据另一列中的条件返回一列中唯一值的数量
- r - 创建包含 dplyr 和 ggplot 的 R 函数
- spring - Eureka 服务不读取 bootstrap.yml 文件
- r - r 宽到长的错误输出行必须由唯一的键组合标识
- git - Github:为什么新的变化出现在文件上而不出现在网站上?