加载中…
个人资料
ParkerWu
ParkerWu
  • 博客等级:
  • 博客积分:0
  • 博客访问:28,065
  • 关注人气:44
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

编程中解决高DPI屏幕下鼠标光标变小的问题!

(2018-10-22 16:02:53)
标签:

dpi

光标

编程

c

目前的许多电脑少则2K,高的都上3K/4K了,传统的很多桌面程序在高DPI下都会显示模糊,或者显示字体很小,如果采用WPF框架,字体界面问题得到了解决,但另外一个问题,就是自定义的鼠标光标不适应高DPI,当然传统的编程也会碰到鼠标光标变小的问题,之前我的博客中提到的WPS办公软件解决了字体显示问题,但各种自定义的鼠标光标小的一沓糊涂,注意我这里特别提到自定义光标,如果你是使用系统预制好的光标资源则不存在此问题。
        研究了好久,突然看到一个控件公司的自定义光标做到了DPI无关,如是反编译找到了关键代码,这里共享出来。
     static ConstructorInfo _cursorScaleStreamCtor= typeof(Cursor).GetConstructor(new Type[2]
   {
       typeof(Stream),
       typeof(bool)
   });
   //这里uri为自定义光标文件的装配位置,不熟的可以百度Uri的使用,光标文件 *.cur编译为资源文件
   internal static Cursor LoadCursor(Uri uri)
        {
            StreamResourceInfo resourceStream = Application.GetResourceStream(uri);
            if ( _cursorScaleStreamCtor != null)
            {
                return (Cursor)_cursorScaleStreamCtor.Invoke(new object[2]
                {
                    resourceStream.Stream,
                    true
                });
            }
            return new Cursor(resourceStream.Stream);
        }
注意,这个代码甚至于可以用到系统盘下的高达128*128的光标文件,另外注意自定义光标文件中除了图像本身,都有一个光标点的设定,一般箭头光标的光标点设置在箭头头部,而手势光标一般设置到图标的中间位置,理论上说图形是否位于图框的中间位置不重要,重要的就是这个光标点,它代表了你的鼠标感知位置。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有