炫彩界面库论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2156|回复: 1

【原创】关于ListView拖放刷新的BUG修改

[复制链接]

该用户从未签到

发表于 2013-7-13 13:57:35 | 显示全部楼层 |阅读模式
本帖最后由 xkjy3000 于 2013-7-13 13:59 编辑

在炫彩库源码listView.cpp中查找函数:void ListView_CalculateView(HELE hEle),将代码替换如下:

  1. //计算视图大小
  2. void ListView_CalculateView(HELE hEle)
  3. {
  4. listView_ *pListView=(listView_*)hEle;
  5. RECT rect;
  6. XEle_GetClientRect(hEle,&rect);
  7. int right=rect.right-XSView_GetSpacingRight(hEle);
  8. right=right-XSView_GetScrollBarWidth(hEle);
  9. int t1=XSView_GetSpacingLeft(hEle);
  10. int t2=XSView_GetSpacingTop(hEle);
  11. //计算分组项
  12. int leftSpace=t1+pListView->leftAlign; //边框左间隔
  13. int topSpace=t2+pListView->topAlign;  //边框上间隔
  14. int x=leftSpace; //X叠加
  15. int y=topSpace;  //Y叠加
  16. int y2=topSpace; //计算每行最大的bottom值
  17. int count=XArray_GetCount(pListView->hArrayList);
  18. int countGroup=XArray_GetCount(pListView->hArrayGroupList);
  19. int itemCX=pListView->iconSize.cx+pListView->left+pListView->right; //项宽度
  20. //计算视图//////////////////////////////////////////////////
  21. for(int g=0;g<countGroup;g++)
  22. {
  23.   listView_group_ *pGroup=(listView_group_*)XArray_GetAt(pListView->hArrayGroupList,g);
  24.   y+=pListView->groupHeight;
  25.   int countItem=XArray_GetCount(pGroup->hArrayList);
  26.   if(pGroup->bExpand)
  27.   {
  28.    if(countItem<1)
  29.    {
  30.     y+=pListView->groupHeight; //空行高度
  31.    }
  32.    else
  33.    {
  34.     for(int i=0;i<countItem;i++)
  35.     {
  36.      listView_item_ *pItem=(listView_item_*)XArray_GetAt(pGroup->hArrayList,i);
  37.      x+=itemCX+pListView->columnSpace;
  38.      int bottpm=y+pListView->top+pListView->bottom+pListView->iconSize.cy+pListView->iconTextSpace+(pItem->rcText.bottom-pItem->rcText.top);
  39.      if(bottpm>y2)
  40.      {
  41.       y2=bottpm;
  42.      }
  43.      if( (x+itemCX+pListView->columnSpace)>right) //换行
  44.      {
  45.       x=leftSpace+itemCX+pListView->columnSpace;
  46.       if ( i == countItem-1 )
  47.       {
  48.        y2 += pListView->top + pListView->bottom + pListView->iconSize.cy + pListView->iconTextSpace + (pItem->rcText.bottom-pItem->rcText.top);
  49.       }
  50.       y=y2+pListView->rowSpace; //行间隔
  51.      }
  52.     }
  53.     y=y2+pListView->rowSpace; //行间隔
  54.     x=leftSpace;
  55.    }
  56.   }
  57. }
  58. y2=y;
  59. //计算未分组项
  60. for(int i=0;i<count;i++)
  61. {
  62.   listView_item_ *pItem=(listView_item_*)XArray_GetAt(pListView->hArrayList,i);
  63.   x=x+itemCX+pListView->columnSpace;
  64.   int bottom=y+pListView->top+pListView->bottom+pListView->iconSize.cy+pListView->iconTextSpace+(pItem->rcText.bottom-pItem->rcText.top);
  65.   if(bottom>y2)
  66.   {
  67.    y2=bottom;
  68.   }
  69.   if((x+itemCX+pListView->columnSpace)>right) //换行
  70.   {
  71.    x=leftSpace+itemCX+pListView->columnSpace;
  72.    if ( i == count-1 )
  73.    {
  74.     y2 += pListView->top + pListView->bottom + pListView->iconSize.cy + pListView->iconTextSpace + (pItem->rcText.bottom-pItem->rcText.top);;
  75.    }
  76.    y=y2+pListView->rowSpace; //行间隔
  77.   }
  78. }
  79. y=y2+pListView->rowSpace; //列间隔
  80. XSView_SetSize(hEle,10,y);
  81. XTRACE("y2= %d \n",y2);
  82. }
复制代码
重新编译后就OK了

该用户从未签到

发表于 2014-3-31 23:32:50 | 显示全部楼层
不错,试一下看。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|Archiver|手机版|小黑屋|炫彩界面库 ( 鄂ICP备2023014763号-1 )

GMT+8, 2024-5-9 03:55 , Processed in 0.073160 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表