------------------------------------------作者xxxx------------------------------------------日期xxxxMFC中ListControl控件的使用分类【精品文档】【精品文档】【精品文档】【精品文档】【精品文档】【精品文档】1.CListCtrl风格 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 HYPERLINK"http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrflistviewstyles.asp"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_SHOWSELALWAYS5.选中和取消选中一行 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;iGetItemCount();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切换焦点时(包括用键盘和鼠标切换),状态的一些变化顺序 添加listctrl控件的LVN_ITEMCHANGED消息相应函数 voidCTest6Dlg::OnItemchangedList1(NMHDR*pNMHDR,LRESULT*pResult){NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR;//TODO:AddyourcontrolnotificationhandlercodehereCStringsTemp;if((pNMListView->uOldState&LVIS_FOCUSED)==LVIS_FOCUSED&&(pNMListView->uNewState&LVIS_FOCUSED)==0){sTemp.Format("%dlostedfocus",pNMListView->iItem);}elseif((pNMListView->uOldState&LVIS_FOCUSED)==0&&(pNMListView->uNewState&LVIS_FOCUSED)==LVIS_FOCUSED){sTemp.Format("%dgotfocus",pNMListView->iItem);}if((pNMListView->uOldState&LVIS_SELECTED)==LVIS_SELECTED&&(pNMListView->uNewState&LVIS_SELECTED)==0){sTemp.Format("%dlostedselected",pNMListView->iItem);}elseif((pNMListView->uOldState&LVIS_SELECTED)==0&&(pNMListView->uNewState&LVIS_SELECTED)==LVIS_SELECTED){sTemp.Format("%dgotselected",pNMListView->iItem);}*pResult=0;} 17.在CListCtrl显示文件,并根据文件类型来显示图标 添加listctrl控件的LVN_ITEMCHANGED消息相应函数 BOOLCTest6Dlg::OnInitDialog(){CDialog::OnInitDialog();HIMAGELISThimlSmall;HIMAGELISThimlLarge;SHFILEINFOsfi;charcSysDir[MAX_PATH];CStringstrBuf;memset(cSysDir,0,MAX_PATH);GetWindowsDirectory(cSysDir,MAX_PATH);strBuf=cSysDir;sprintf(cSysDir,"%s",strBuf.Left(strBuf.Find("\\")+1));himlSmall=(HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir,0,&sfi,sizeof(SHFILEINFO),SHGFI_SYSICONINDEX|SHGFI_SMALLICON);himlLarge=(HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir,0,&sfi,sizeof(SHFILEINFO),SHGFI_SYSICONINDEX|SHGFI_LARGEICON);if(himlSmall&&himlLarge){::SendMessage(m_list.m_hWnd,LVM_SETIMAGELIST,(WPARAM)LVSIL_SMALL,(LPARAM)himlSmall);::SendMessage(m_list.m_hWnd,LVM_SETIMAGELIST,(WPARAM)LVSIL_NORMAL,(LPARAM)himlLarge);}returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCTest6Dlg::AddFiles(LPCTSTRlpszFileName,BOOLbAddToDocument){intnIcon=GetIconIndex(lpszFileName,FALSE,FALSE);CStringstrSize;CFileFindfilefind;//getfilesizeif(filefind.FindFile(lpszFileName)){filefind.FindNextFile();strSize.Format("%d",filefind.GetLength());}elsestrSize="0";//splitpathandfilenameCStringstrFileName=lpszFileName;CStringstrPath;intnPos=strFileName.ReverseFind('\\');if(nPos!=-1){strPath=strFileName.Left(nPos);strFileName=strFileName.Mid(nPos+1);}//inserttolistintnItem=m_list.GetItemCount();m_list.InsertItem(nItem,strFileName,nIcon);m_list.SetItemText(nItem,1,strSize);m_list.SetItemText(nItem,2,strFileName.Right(3));m_list.SetItemText(nItem,3,strPath);}intCTest6Dlg::GetIconIndex(LPCTSTRlpszPath,BOOLbIsDir,BOOLbSelected){SHFILEINFOsfi;memset(&sfi,0,sizeof(sfi));if(bIsDir){SHGetFileInfo(lpszPath,FILE_ATTRIBUTE_DIRECTORY,&sfi,sizeof(sfi),SHGFI_SMALLICON|SHGFI_SYSICONINDEX|SHGFI_USEFILEATTRIBUTES|(bSelected?SHGFI_OPENICON:0));returnsfi.iIcon;}else{SHGetFileInfo(lpszPath,FILE_ATTRIBUTE_NORMAL,&sfi,sizeof(sfi),SHGFI_SMALLICON|SHGFI_SYSICONINDEX|SHGFI_USEFILEATTRIBUTES|(bSelected?SHGFI_OPENICON:0));returnsfi.iIcon;}return-1;}18.listctrl内容进行大数据量更新时,避免闪烁 添加listctrl控件的NM_RCLICK消息相应函数 m_list.SetRedraw(FALSE);//更新内容m_list.SetRedraw(TRUE);m_list.Invalidate();m_list.UpdateWindow();或者参考
本文档为【MFC中ListControl控件的使用分类】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。