如何在CListCtrl列表项中添加复选按钮那样的状态选择,SetImageList中的LVSIL_STATE如何使用???

school 2006-07-23 05:00:46
如何在CListCtrl列表项中添加复选按钮那样的状态选择,SetImageList中的LVSIL_STATE如何使用???
...全文
481 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Juchiyufei 2006-07-23
  • 打赏
  • 举报
回复
1.设置行高.

2.设置每一列的格式(_COLUMN_FORMAT),这个用于在排序时区分是以字符串,还是以数字.

3.设置每一行的背景颜色.(如一些数据需要着重显示给用户)

4.设置每一个SubItem的字体,大小,前景色,背景色.(如一些数据需要着重显示给用户).

5.可以设置每一个SubItem在位即时编辑它.目前的版本实现了以CEdit为编辑框的编辑,支持只读编辑与在正常的编辑,并能设置CEdit的格式字体,颜色,背景(在缺省情况下与当前激活它的subitem同一属性),并且还能设置CEdit接收输入的字符(如:只允许为数字的字符编辑),在目前的版本中还未实现mask edit.

6.可以设置每一个SubItem在位即时编辑它.目前的版本还实现了以Combo box,list box为下拉框的数据选择.并且也支持能设置它们的属性.同上.

7.并且还可以让它自动保存每列设置的宽度,以便下次启动时和上次一样.
8,当SubItem的宽度不能完全显示完数据时,当鼠标移上时会自显示Text Toop tip.

9,新的功能还在增加中....


这个ClistCtrl是我自己重写的哈.
有什么需要或帮助可以发邮件到nofate.yang@163.com联系我哈.



kencharles 2006-07-23
  • 打赏
  • 举报
回复
楼上的讲得非常仔细!
houhq 2006-07-23
  • 打赏
  • 举报
回复
CListCtrl使用详解
作者:fairness


1。先来介绍REPORT类型的CListCtrl:
首先使用下面的语句设置CListCtrl的style:
DWORD SetExtendedStyle( DWORD dwNewStyle );
其中
LVS_EX_CHECKBOXES 表示添加CheckBox
LVS_EX_FULLROWSELECT 表示选择整行
LVS_EX_GRIDLINES 表示添加表格线

如果设置了LVS_EX_CHECKBOXES属性,则可以用
BOOL GetCheck( int nItem ) const;
来得到某一行是否Checked。

可以先用下面的语句来删除以前的东西:
for(int k=2;k>=0;k--) //注意要从后往前删,否则出错
m_ListCtrl.DeleteColumn(k);
m_ListCtrl.DeleteAllItems();

用下面的语句新建列:
m_ListCtrl.InsertColumn(0,_T("文件名"),LVCFMT_IMAGE|LVCFMT_LEFT);
m_ListCtrl.InsertColumn(1,_T("仪器类别"));
m_ListCtrl.InsertColumn(2,_T("项目类别"));

其中LVCFMT_IMAGE表示可以在第一列加入图标。如果不要图标可以删去。

然后设置列宽:
for(j=0;j<3;j++)
m_ListCtrl.SetColumnWidth(j ,100);

以下为列表加入图标,如果不需要图标,可以跳过这一步。注意只在第一次加入,如果多次加入会出错!
先在头文件中加入声明:
CImageList m_ImageList;
这是必要的,如果在cpp的某个函数中加入由于生命期结束,CImageList自动释放,则效果是列表中看不到图标,只看到一个白方块。
下面生成CImageList,并将其绑定到CListCtrl中,这是CImageList中还没有图标,只是一个容器:
static int flag=2;
if(flag==2){//只调用一次SetImageList,否则出错
m_ImageList.Create(128, 128, ILC_COLORDDB|ILC_MASK, 20, 1);
m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);
}
flag=(flag+1)%2;
如果CListCtrl已经用过,曾经加过图标进去,这时就要删除上次放进m_ImageList中的Image
for(int kk=0;kk<m_ImageList.GetImageCount();kk++)
m_ImageList.Remove(k);

下面介绍如何向CListCtrl里面加入行,并同时为每一行动态加入图标:
假设m_listRowCount为要加入的行数。
CBitmap* bitmap;
bitmap=new CBitmap[m_list1rowCount];
HBITMAP hbitmap;

for(int i = 0; i < m_listRowCount; i++)
{
//为每一行插入相应的缩略图
CFile f;
CFileException e;
if( !f.Open(m_FileName, CFile::modeRead, &e )){ //m_FileName为bmp文件名,由你来定
hbitmap = (HBITMAP)LoadImage(NULL,path+"blank.bmp",IMAGE_BITMAP,0,0,
LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
}else{
f.Close();
hbitmap = (HBITMAP)LoadImage(NULL,bmpFile,IMAGE_BITMAP,0,0,
LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
}
bitmap[i].Attach(hbitmap);
m_ImageList.Add(&bitmap[i], RGB(0, 128, 128));

//插入行
m_ListCtrl.InsertItem(i,m_FileName,i);
m_ListCtrl.SetItemText(i,1,type);
m_ListCtrl.SetItemText(i,2,m_Path);
}

//记得删除已经没用的临时文件
if(m_list1rowCount!=0)
delete[] bitmap;

2。如果是ICON类型的CListCtrl,则要做一点点改动:
把绑定图标集的代码由
SetImageList(&m_ImageList,LVSIL_SMALL);
改为
SetImageList(&m_ImageList,LVSIL_NORMAL);

插入行时只用
InsertItem(i,mainSet.m_FileName,i);
不用
SetItemText(i,1,type);
之类的代码。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧