【duilib界面库】duilib界面库(干货) 修复UIScrollBar鼠标移出控件外显示异常的BUG
来源:互联网 发布:怎么让淘宝店有生意 编辑:程序博客网 时间:2024/04/30 19:31
在开发中突然发现UIScrollBar有一个重大bug,很影响用户体验,现在我把解决方案分享给大家,首先我们看下出BUG的地方
首先打开duilib中的TestApp1_ud.exe实例程序,打开后看最下面有一个CListUI控件,此控件中包含一个垂直的滚动条
这是正常状况下UIScrollBar控件中的滑块外观,颜色为白色
这是鼠标移动到滑块上的外观,滑块颜色为淡蓝色
注意:为了方便演示,方框中的红点标示鼠标的位置
这是鼠标移动到滑块的正下方时滑块的颜色。此时恢复到正常状况下的白色
好了,接下来问题就出现了,当鼠标重新移动到滑块上时,此时滑块颜色重新归为淡蓝色,但是此时将鼠标移动到滑块的左边,也就是移动到CListUI控件内部时,此时滑块颜色依然是淡蓝色
这种的效果很影响用户体验,我们需要的效果是,当我们移动到滑块之外时,需要将滑块颜色变为正常颜色,所以我们只能通过修改系统源码来解决这个问题
首先找到void CScrollBarUI::DoEvent(TEventUI& event)这个函数,此函数在CScrollBarUI.cpp的第638行
然后我们移动到此函数的最下面,找到if( event.Type == UIEVENT_MOUSELEAVE)这行代码
这行代码的意思是当鼠标离开时触发的事件,问题就出在这里了
if( event.Type == UIEVENT_MOUSELEAVE ){ if( ::PtInRect(&m_rcItem, event.ptMouse ) ) { if( IsEnabled() ) { m_uButton1State &= ~UISTATE_HOT; m_uButton2State &= ~UISTATE_HOT; m_uThumbState &= ~UISTATE_HOT; Invalidate(); } if (m_pManager) m_pManager->RemoveMouseLeaveNeeded(this); } else { if (m_pManager) m_pManager->AddMouseLeaveNeeded(this); return; }}其中PtInRect函数用来判断鼠标是否在滑块范围内,所以我们需要看else中的处理函数,但是,这个函数中没有对滑块状态做任何处理,ok,位置找到了,我们要修改的就是此处代码
else { if(m_uThumbState & UISTATE_HOT) { m_uThumbState &= ~UISTATE_HOT; Invalidate(); } if (m_pManager)m_pManager->AddMouseLeaveNeeded(this); return; }
OK,代码比较简单,就不做解释了,此时我们编译运行,效果已经达到了
OK,此处应该鲜花刷起来~haha
0 0
- 【duilib界面库】duilib界面库(干货) 修复UIScrollBar鼠标移出控件外显示异常的BUG
- 修复duilib库UISlider控件的4个bug
- Duilib界面库Capture系列的相关bug解决
- Duilib界面库Capture系列的相关bug解决
- 初识Duilib界面库
- DUILIB界面库出现控件问题的解决
- 最新的Duilib界面库源码
- directui界面库 Duilib是开源的
- 开源界面库Duilib
- Duilib界面库学习笔记
- duilib 界面库资料收集
- Duilib界面库使用简介
- 【duilib界面库】duilib界面库(1)初识duilib界面库及编译配置详解
- duilib的界面开发
- duilib combo控件,当鼠标滚动时下拉列表自动关闭的bug的修复
- duilib 修复CTreeViewUI控件动态添加子控件时,对是否显示判断不足的bug
- C++界面库 《duilib入门到精通》- duilib概述
- duilib 修复 容器控件 rightbordersize和bottombordersize属性显示错误的bug
- Ubuntu Server 安装xfce4
- mysql max_allowed_packet自动重置为1024 终结解决
- AndroidStudio2.2.3更新2.3一路趟坑
- Js中的一些命名规范与命名不规范会引发的常见错误
- SQL 同时对多个表进行模糊查询并自定义顺序
- 【duilib界面库】duilib界面库(干货) 修复UIScrollBar鼠标移出控件外显示异常的BUG
- Valid Palindrome
- Java不同类方法的调用以及static方法小解
- 成功的背后
- spring mvc 返回json中去除null字段
- Appium的前世今生、工作原理等
- 回溯法
- Spark优化-数据倾斜解决方案 提高shuffle操作reduce并行度
- jdbc连接oracle、mysql等主流数据库的驱动类和url