首页 MFC中ListControl控件的使用分类

MFC中ListControl控件的使用分类

举报
开通vip

MFC中ListControl控件的使用分类------------------------------------------作者xxxx------------------------------------------日期xxxxMFC中ListControl控件的使用分类【精品文档】【精品文档】【精品文档】【精品文档】【精品文档】【精品文档】1.CListCtrl风格     LVS_ICON:为每个item显示大图标     LVS_SMALLICON:为每个item显示小图标     LVS_LIST:显示一列带有小图标的item     LVS...

MFC中ListControl控件的使用分类
------------------------------------------作者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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
simle
我是一线教师 有丰富的 教学经验
格式:doc
大小:176KB
软件:Word
页数:0
分类:
上传时间:2021-10-15
浏览量:2