VC CSortListCtrl加强版

一中小队腼q

一中小队腼q

2016-02-19 21:44

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐VC CSortListCtrl加强版,无聊中的都看过来。

    这是一个可以自由选择多个子项的列表控件。由于项目需要,使用了 CSortListCtrl 这个类,从“VC知识库” 网站下载的源码。我的项目中主要用到该类可方便变化 ITEM 颜色的优点。但是我项目中还要求可以通过鼠标拖动来选择多项,注意不是整行整行的选择,而是自由地选择。所以我把自己如何实现用鼠标拖动来选择多项 SubItem 的方法贴出来:主要思路:在 CSortListCtrl 类的 OnMouseMove 消息中处理,先判断鼠标左键是否按下,如果按下(这种状态其实就是鼠标的 Drag 状态),就获取鼠标目前所在的行号和列号,然后设置该行号和列号的颜色不同于一般情况下的颜色,以标识为被选中状态;同时把行号和列号存储起来用于后面的操作。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  代码如下:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  .h文件中:定义了两个变量用来存储选中的行和列

CUIntArray ITEM; //用于选中行号的集合
CUIntArray SUBITEM; //用于选中列号的集合
  .cpp文件中的代码:

// TODO: 拖动鼠标消息处理函数
if(nFlags == MK_LBUTTON)
{
   LVHITTESTINFO hitTestInfo;
   hitTestInfo.pt = point;
   this-SubItemHitTest(&hitTestInfo);
   this-SetItemColor(hitTestInfo.iItem,hitTestInfo.iSubItem,RGB(255,255,255),RGB(50,50,50));
   for(int i=0;i ITEM.GetCount();i++) //避免存储重复的SubItem。
   {
     if(hitTestInfo.iItem==ITEM.GetAt(i)&&hitTestInfo.iSubItem==SUBITEM.GetAt(i))
     {
       return;
     }
     this-ITEM.Add(hitTestInfo.iItem); //把选中的行号和列号一一对应的存入数组中
     this-SUBITEM.Add(hitTestInfo.iSubItem);
   }
}
CListCtrl::OnMouseMove(nFlags, point);
  下面两个消息处理函数:“开始拖动”和“单击”是为了解决重新拖动以及单击时清除前一次拖动所做的选择

void CSortListCtrl::OnLvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
{
   LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);
   // TODO: 开始拖动鼠标消息处理函数
   this-SetItemState(pNMLV-iItem,0,LVIS_SELECTED); //取消当前被选中行的选中状态
   //清空前一次拖动所做的选择
   for(int i=0;i ITEM.GetCount();i++)
   {
     this-SetItemColor(ITEM.GetAt(i),SUBITEM.GetAt(i),RGB(0,0,0),RGB(255,255,255));
     ??}
   this-ITEM.RemoveAll();
   this-SUBITEM.RemoveAll();
   *pResult = 0;
}
void CSortListCtrl::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
{
   // TODO: 鼠标单击事件
   for(int i=0;iITEM.GetCount();i++)
   {
     this-SetItemColor(this-ITEM.GetAt(i),this-SUBITEM.GetAt(i),RGB(0,0,0),RGB(255,255,255));
   }
   this-ITEM.RemoveAll();
   this-SUBITEM.RemoveAll();
   *pResult = 0;
}   
  附加说明:我在这个项目中实现的功能是——对所选项右键单击,弹出快捷菜单,进行各种操作,如同时对所有选中的项进行“加法”、“减法”、“乘法”和“除法”等操作 。因为取得了选中的行号和列号,您可以根据自己的需要来实现对所选项的操作。

展开更多 50%)
分享

猜你喜欢

VC CSortListCtrl加强版

编程语言 网络编程
VC CSortListCtrl加强版

CSortListCtrl 加强版

C语言教程 C语言函数
CSortListCtrl 加强版

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

巫师加强版攻略

电脑网络
巫师加强版攻略

边境之门加强版攻略

电脑网络
边境之门加强版攻略

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

果蔬的健康“加强版”

营养价值
果蔬的健康“加强版”

《无双大蛇》攻略宝典加强版

电脑网络
《无双大蛇》攻略宝典加强版

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

XML轻松学习手册(1)XML快速入门

XML轻松学习手册(1)XML快速入门

Xml_javascript分页

Xml_javascript分页
下拉加载更多内容 ↓