VC CListCtrl使用技巧.docx
- 文档编号:2362719
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:12
- 大小:20.93KB
VC CListCtrl使用技巧.docx
《VC CListCtrl使用技巧.docx》由会员分享,可在线阅读,更多相关《VC CListCtrl使用技巧.docx(12页珍藏版)》请在冰豆网上搜索。
VCCListCtrl使用技巧
VC——CListCtrl使用技巧
2010年7月7日yanghy
跳到评论
Description:
LVS_ICON:
为每个item显示大图标
LVS_SMALLICON:
为每个item显示小图标
LVS_LIST:
显示一列带有小图标的item
LVS_REPORT:
显示item详细资料
直观的理解:
windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”
2.设置listctrl风格及扩展风格
LONGlStyle;
lStyle=GetWindowLong(m_list.m_hWnd,GWL_STYLE);//获取当前窗口style
lStyle&=~LVS_TYPEMASK;//清除显示方式位
lStyle|=LVS_REPORT;//设置style
SetWindowLong(m_list.m_hWnd,GWL_STYLE,lStyle);//设置style
DWORDdwStyle=m_list.GetExtendedStyle();
dwStyle|=LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle|=LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
dwStyle|=LVS_EX_CHECKBOXES;//item前生成checkbox控件
m_list.SetExtendedStyle(dwStyle);//设置扩展风格
注:
listview的style请查阅msdn
3.插入数据
m_list.InsertColumn(0,“ID”,LVCFMT_LEFT,40);//插入列
m_list.InsertColumn(1,“NAME”,LVCFMT_LEFT,50);
intnRow=m_list.InsertItem(0,“11”);//插入行
m_list.SetItemText(nRow,1,“jacky”);//设置数据
4.一直选中item
选中style中的Showselectionalways,或者在上面第2点中设置LVS_SHOWSELALWAYS
5.选中和取消选中一行
intnIndex=0;
//选中
m_list.SetItemState(nIndex,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
//取消选中
m_list.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);
6.得到listctrl中所有行的checkbox的状态
m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);
CStringstr;
for(inti=0;i { if(m_list.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED||m_list.GetCheck(i)) { str.Format(_T(“第%d行的checkbox为选中状态”),i); AfxMessageBox(str); } } 7.得到listctrl中所有选中行的序号 方法一: CStringstr; for(inti=0;i { if(m_list.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED) { str.Format(_T(“选中了第%d行”),i); AfxMessageBox(str); } } 方法二: POSITIONpos=m_list.GetFirstSelectedItemPosition(); if(pos==NULL) TRACE0(“Noitemswereselected! \n”); else { while(pos) { intnItem=m_list.GetNextSelectedItem(pos); TRACE1(“Item%dwasselected! \n”,nItem); //youcoulddoyourownprocessingonnItemhere } } 8.得到item的信息 TCHARszBuf[1024]; LVITEMlvi; lvi.iItem=nItemIndex; lvi.iSubItem=0; lvi.mask=LVIF_TEXT; lvi.pszText=szBuf; lvi.cchTextMax=1024; m_list.GetItem(&lvi); 关于得到设置item的状态,还可以参考msdn文章 Q173242: UseMaskstoSet/GetItemStatesinCListCtrl 9.得到listctrl的所有列的header字符串内容 LVCOLUMNlvcol; char str[256]; int nColNum; CString strColumnName[4];//假如有4列 nColNum=0; lvcol.mask=LVCF_TEXT; lvcol.pszText=str; lvcol.cchTextMax=256; while(m_list.GetColumn(nColNum,&lvcol)) { strColumnName[nColNum]=lvcol.pszText; nColNum++; } 10.使listctrl中一项可见,即滚动滚动条 m_list.EnsureVisible(i,FALSE); 11.得到listctrl列数 intnHeadNum=m_list.GetHeaderCtrl()->GetItemCount(); 12.删除所有列 方法一: while(m_list.DeleteColumn(0)) 因为你删除了第一列后,后面的列会依次向上移动。 方法二: intnColumns=4; for(inti=nColumns-1;i>=0;i–) m_list.DeleteColumn(i); 13.得到单击的listctrl的行列号 添加listctrl控件的NM_CLICK消息相应函数 voidCTest6Dlg: : OnClickList1(NMHDR*pNMHDR,LRESULT*pResult) { //方法一: /* DWORDdwPos=GetMessagePos(); CPointpoint(LOWORD(dwPos),HIWORD(dwPos)); m_list.ScreenToClient(&point); LVHITTESTINFOlvinfo; lvinfo.pt=point; lvinfo.flags=LVHT_ABOVE; intnItem=m_list.SubItemHitTest(&lvinfo); if(nItem! =-1) { CStringstrtemp; strtemp.Format(“单击的是第%d行第%d列”,lvinfo.iItem,lvinfo.iSubItem); AfxMessageBox(strtemp); } */ //方法二: /* NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR; if(pNMListView->iItem! =-1) { CStringstrtemp; strtemp.Format(“单击的是第%d行第%d列”, pNMListView->iItem,pNMListView->iSubItem); AfxMessageBox(strtemp); } */ *pResult=0; } 14.判断是否点击在listctrl的checkbox上 添加listctrl控件的NM_CLICK消息相应函数 voidCTest6Dlg: : OnClickList1(NMHDR*pNMHDR,LRESULT*pResult) { DWORDdwPos=GetMessagePos(); CPointpoint(LOWORD(dwPos),HIWORD(dwPos)); m_list.ScreenToClient(&point); LVHITTESTINFOlvinfo; lvinfo.pt=point; lvinfo.flags=LVHT_ABOVE; UINTnFlag; intnItem=m_list.HitTest(point,&nFlag); //判断是否点在checkbox上 if(nFlag==LVHT_ONITEMSTATEICON) { AfxMessageBox(“点在listctrl的checkbox上”); } *pResult=0; } 15.右键点击listctrl的item弹出菜单 添加listctrl控件的NM_RCLICK消息相应函数 voidCTest6Dlg: : OnRclickList1(NMHDR*pNMHDR,LRESULT*pResult) { NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR; if(pNMListView->iItem! =-1) { DWORDdwPos=GetMessagePos(); CPointpoint(LOWORD(dwPos),HIWORD(dwPos)); CMenumenu; VERIFY(menu.LoadMenu(IDR_MENU1)); CMenu*popup=menu.GetSubMenu(0); ASSERT(popup! =NULL); popup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this); } *pResult=0; } 16.item切换焦点时(包括用键盘和鼠标切换item时),状态的一些变化顺序 添加listctrl控件的LVN_ITEMCHANGED消息相应函数 voidCTest6Dlg: : OnItemchangedList1(NMHDR*pNMHDR,LRESULT*pResult) { NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR; //TODO: Addyourcontrolnotificationhandlercode
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC CListCtrl使用技巧 CListCtrl 使用 技巧