zoukankan      html  css  js  c++  java
  • 仿酷狗音乐播放器开发日志十一——CTreeNodeUI的bug修复

     由于做播放列表控件,我的CMusicLength控件继承了CTreeVieWUI控件,在向分组控件中添加播放项目时,发现代码无法正常工作,调用CTreeNodeUI控件的Add方法后无反应,导致我的播放器无法动态增加项目。
        在对duilib源码调试后发现,CTreeNodeUI类的AddAt方法存在bug,AddAt的原型为

        long CTreeViewUI::AddAt( CTreeNodeUI* pControl, int iIndex );

        其中的iIndex参数代表希望插到的位置,在函数中做了多个判断来确保插入的正确性,但其中有一行代码存在bug,bug代码如下:

        CTreeNodeUI* pParent = static_cast<CTreeNodeUI*>(GetItemAt(iIndex));
    if(!pParent)
    return -1;

        函数用来在分组中插入子元素,插入时做判断,在指定的位置的是否是可以容纳元素的分组项目,但是分组项目的位置应该是将要被插入的位置的上一个位置。原函数直接检测在被插入位置是否是分组项目,理所当然会返回NULL,导致函数最终返回-1,而插入失败。
        修复的方法很简单,把  CTreeNodeUI* pParent = static_cast<CTreeNodeUI*>(GetItemAt(iIndex));改为  CTreeNodeUI* pParent = static_cast<CTreeNodeUI*>(GetItemAt(iIndex -1 )); 
     这样可以正确检索到分组项目,程序可以正常运行了。这个此次软件项目中发现duilib的第三个bug。mark。
    2014.7.19  13:42  Redrain 
  • 相关阅读:
    typeof的用法
    新建一个express工程,node app无反应
    搜索引擎-倒排索引基础知识
    搭建Hadoop2.6.0+Eclipse开发调试环境(以及log4j.properties的配置)
    hadoop下远程调试方法
    回调函数透彻理解Java
    Maven 手动添加 JAR 包到本地仓库
    Hbase rowkey热点问题
    Hadoop 2.2 & HBase 0.96 Maven 依赖总结
    通过Java Api与HBase交互
  • 原文地址:https://www.cnblogs.com/redrainblog/p/4275845.html
Copyright © 2011-2022 走看看