




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、LPNMITEMACTIVATE 未定义在windows Ce 5.0中用C+开发程序在ListCtrl中使用(通过缺省代码自动添加的例如:NM_CLICK) LPNMITEMACTIVATE,编译时提示"LPNMITEMACTIVATE" 未定义网上说的很少,下面是解决方法:LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR); /代替TRACE2("%d,%drn",pNMLV->iItem,pNMLV->iSubItem); /显示点击的Item subite
2、mLPNMITEMACTIVATE在VC中使用,或者说windows 中使用不能在windows ce中使用1)添加 列m_list.InsertColumn(0, _T("NAME"), LVCFMT_LEFT, 80); / 添加 列 最后数字 表示 列宽m_list.InsertColumn(1, _T("State"), LVCFMT_LEFT, 160);2) 显示内容m_list.SetItemText(0,1,_T("Item 1_2");/ 0 行 1列 显示内容 m_list.SetItemText(1,1,_T(&
3、quot;Item 2_2");/m_list.SetItemText(3,1,_T("Item 4_2");/【注】 为了能按照你指定的顺序显示,建议去掉排序选项但此时 选择的时候 只能选择 第一列中的某项!3)风格(整行选中。)一次选择可以 选择一行需要设置风格,ListView_SetExtendedListViewStyle(m_list.m_hWnd, LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP|LVS_EX_CHECKBOXES);其中LVS_EX_FULLROWSELECT 就是前面说得整行选中LVS_E
4、X_GRIDLINES 网格线(只适用与report风格的listctrl)LVS_EX_CHECKBOXES 前面加个checkboxLVS_EX_HEADERDRAGDROP 整列的拖拽移动4)调整列宽插入的新的列的时候 ,可以调整列宽 方法如下CRect rect;m_list.GetWindowRect(&rect);m_list.InsertColumn(0, _T("NAME"), LVCFMT_LEFT, rect.Width()*0.6);5)读取内容CString ItemStr = m_list.GetItemText(0,0);读取内容6)获得
5、当前行号方法一:比较简单的 直接一个宏搞定int nItem = -1;LPNMITEMACTIVATE lpNMItemActivate = (LPNMITEMACTIVATE)pNMHDR; if(lpNMItemActivate != NULL)nItem = lpNMItemActivate->iItem;方法二 :在EVC中可以用的int nItem = -1;POSITION pos = m_list.GetFirstSelectedItemPosition(); if (pos = NULL)/TRACE0( "No items were selected!n &
6、quot;);elsenItem = m_list. GetNextSelectedItem(pos);7)指定选定某行m_list.SetItemState(n, LVIS_SELECTED, LVIS_SELECTED);【注】控件一定要先获得焦点! 即 m_list.SetFocus();Example/ Pointer to the list view control.CListCtrl* pmyListCtrl;/ Make sure the focus is set to the list view control.pmyListCtrl->SetFocus();/ Sele
7、ct all of the items that are completely n = pmyListCtrl->GetTopIndex();int nLast = n + pmyListCtrl->GetCountPerPage();for (;n < nLast;n+)pmyListCtrl->SetItemState(n, LVIS_SELECTED, LVIS_SELECTED); ASSERT(pmyListCtrl->GetItemState(n, LVIS_SELECTED) =LVIS_SELECTED);本文来自CSDN博
8、客,转载请标明出处:以下未经说明,listctrl默认view 风格为report相关类及处理函数MFC:CListCtrl类SDK:以 “ListView_”开头的一些宏。如 ListView_InsertColumn-1. CListCtrl 风格LVS_ICON: 为每个item显示大图标LVS_SMALLICON: 为每个item显示小图标LVS_LIST: 显示一列带有小图标的itemLVS_REPORT: 显示item详细资料m_list.ModifyStyle(0,LVS_REPORT); /显示列头直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详
9、细资料”-2. 设置listctrl 风格及扩展风格LONG lStyle;lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);/获取当前窗口stylelStyle &= LVS_TYPEMASK; /清除显示方式位lStyle |= LVS_REPORT; /设置styleSetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);/设置style DWORD dwStyle = m_list.GetExtendedStyle();dwStyle |= LVS_EX_FULLROWSELECT;/选中某
10、行使整行高亮(只适用与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, "NAM
11、E", LVCFMT_LEFT, 50 );int nRow = m_list.InsertItem(0, “11”);/插入行m_list.SetItemText(nRow, 1, “jacky”);/设置数据(1):LVITEM Item;Item.mask=LVIF_TEXT; /设置类型必须的Item.iItem=0;/设置int Iint InsertItem(int nItem,LPCTSTR lpszItem)的nItem;Item.iSubItem =0; /设置分项目,0代表是主项目Item.pszText=_T("Kang");m_list.I
12、nsertItem(&Item);-4. 一直选中item选中style中的Show selection always,或者在上面第2点中设置LVS_SHOWSELALWAYS-5. 选中和取消选中一行int nIndex = 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的状
13、态m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);CString str;for(int i=0; i<m_list.GetItemCount(); i+)if( m_list.GetItemState(i, LVIS_SELECTED) = LVIS_SELECTED | m_list.GetCheck(i)str.Format(_T("第%d行的checkbox为选中状态"), i); AfxMessageBox(str);-7. 得到listctrl中所有选中行的序号方法一:CString str;for(int i=0;
14、i<m_list.GetItemCount(); i+)if( m_list.GetItemState(i, LVIS_SELECTED) = LVIS_SELECTED ) str.Format(_T("选中了第%d行"), i);AfxMessageBox(str);方法二:POSITION pos = m_list.GetFirstSelectedItemPosition();if (pos = NULL)TRACE0("No items were selected!n");elsewhile (pos)int nItem = m_list.
15、GetNextSelectedItem(pos); TRACE1("Item %d was selected!n", nItem);/ you could do your own processing on nItem here -8. 得到item的信息TCHAR szBuf1024;LVITEM lvi;lvi.iItem = nItemIndex;lvi.iSubItem = 0;lvi.mask = LVIF_TEXT;lvi.pszText = szBuf;lvi.cchTextMax = 1024;m_list.GetItem(&lvi);关于得到设置i
16、tem的状态,还可以参考msdn文章-9. 得到listctrl的所有列的header字符串内容LVCOLUMN lvcol;char str256;int nColNum;CString strColumnName4;/假如有4列nColNum = 0;lvcol.mask = LVCF_TEXT;lvcol.pszText = str;lvcol.cchTextMax = 256;while(m_list.GetColumn(nColNum, &lvcol)strColumnNamenColNum = lvcol.pszText;nColNum+;-10. 使listctrl中一项
17、可见,即滚动滚动条m_list.EnsureVisible(i, FALSE);-11. 得到listctrl列数int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();-12. 删除所有列方法一:while ( m_list.DeleteColumn (0)因为你删除了第一列后,后面的列会依次向上移动。方法二:int nColumns = 4;for (int i=nColumns-1; i>=0; i-)m_list.DeleteColumn (i);-13. 得到单击的listctrl的行列号添加listctrl控件的NM_
18、CLICK消息相应函数void CTest6Dlg:OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) / 方法一:/ 方法二:*pResult = 0;-14. 判断是否点击在listctrl的checkbox上添加listctrl控件的NM_CLICK消息相应函数void CTest6Dlg:OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) DWORD dwPos = GetMessagePos();CPoint point( LOWORD(dwPos), HIWORD(dwPos) );m_list.Scr
19、eenToClient(&point);LVHITTESTINFO lvinfo;lvinfo.pt = point;lvinfo.flags = LVHT_ABOVE;UINT nFlag;int nItem = m_list.HitTest(point, &nFlag);/判断是否点在checkbox上if(nFlag = LVHT_ONITEMSTATEICON)AfxMessageBox("点在listctrl的checkbox上"); *pResult = 0;-15. 右键点击listctrl的item弹出菜单添加listctrl控件的NM_RC
20、LICK消息相应函数void CTest6Dlg:OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult) NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;if(pNMListView->iItem != -1)DWORD dwPos = GetMessagePos();CPoint point( LOWORD(dwPos), HIWORD(dwPos) );CMenu menu;VERIFY( menu.LoadMenu( IDR_MENU1 ) );CMenu* popup = menu.GetSub
21、Menu(0);ASSERT( popup != NULL );popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );*pResult = 0;-16. item切换焦点时(包括用键盘和鼠标切换item时),状态的一些变化顺序 添加listctrl控件的LVN_ITEMCHANGED消息相应函数void CTest6Dlg:OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)NM_LISTVIEW* pNMListView = (NM
22、_LISTVIEW*)pNMHDR;/ TODO: Add your control notification handler code hereCString sTemp;if(pNMListView->uOldState & LVIS_FOCUSED) = LVIS_FOCUSED &&(pNMListView->uNewState & LVIS_FOCUSED) = 0)sTemp.Format("%d losted focus",pNMListView->iItem); else if(pNMListView->
23、;uOldState & LVIS_FOCUSED) = 0 && (pNMListView->uNewState & LVIS_FOCUSED) = LVIS_FOCUSED) sTemp.Format("%d got focus",pNMListView->iItem); if(pNMListView->uOldState & LVIS_SELECTED) = LVIS_SELECTED &&(pNMListView->uNewState & LVIS_SELECTED) = 0)s
24、Temp.Format("%d losted selected",pNMListView->iItem); else if(pNMListView->uOldState & LVIS_SELECTED) = 0 && (pNMListView->uNewState & LVIS_SELECTED) = LVIS_SELECTED) sTemp.Format("%d got selected",pNMListView->iItem); *pResult = 0;-17. 得到另一个进程里的listct
25、rl控件的item内容-18. 选中listview中的itemQ131284: How To Select a Listview Item Programmatically-19. 如何在CListView中使用CListCtrl的派生类20. listctrl的subitem添加图标m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);m_list.SetItem(.); /具体参数请参考msdn-21. 在CListCtrl显示文件,并根据文件类型来显示图标网上找到的代码,shareBOOL CTest6Dlg:OnInitDialog()CDial
26、og:OnInitDialog();HIMAGELIST himlSmall;HIMAGELIST himlLarge;SHFILEINFO sfi;char cSysDirMAX_PATH;CString strBuf;memset(cSysDir, 0, MAX_PATH);GetWindowsDirectory(cSysDir, MAX_PATH);strBuf = cSysDir;sprintf(cSysDir, "%s", strBuf.Left(strBuf.Find("")+1); himlSmall = (HIMAGELIST)SHGet
27、FileInfo (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,(WP
28、ARAM)LVSIL_SMALL, (LPARAM)himlSmall); :SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST, (WPARAM)LVSIL_NORMAL,(LPARAM)himlLarge);return TRUE; / return TRUE unless you set the focus to a controlvoid CTest6Dlg:AddFiles(LPCTSTR lpszFileName, BOOLbAddToDocument)int nIcon = GetIconIndex(lpszFileName, FALSE, F
29、ALSE); CString strSize;CFileFind filefind;/ get file sizeif (filefind.FindFile(lpszFileName)filefind.FindNextFile();strSize.Format("%d", filefind.GetLength();elsestrSize = "0"/ split path and filenameCString strFileName = lpszFileName;CString strPath;int nPos = strFileName.Revers
30、eFind('');if (nPos != -1)strPath = strFileName.Left(nPos);strFileName = strFileName.Mid(nPos + 1);/ insert to listint nItem = 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.Set
31、ItemText(nItem, 3, strPath);int CTest6Dlg:GetIconIndex(LPCTSTR lpszPath, BOOL bIsDir, BOOL bSelected)SHFILEINFO sfi;memset(&sfi, 0, sizeof(sfi);if (bIsDir)SHGetFileInfo(lpszPath,FILE_ATTRIBUTE_DIRECTORY,&sfi,sizeof(sfi),SHGFI_SMALLICON | SHGFI_SYSICONINDEX | SHGFI_USEFILEATTRIBUTES |(bSelect
32、ed ? SHGFI_OPENICON : 0);return sfi.iIcon;elseSHGetFileInfo (lpszPath,FILE_ATTRIBUTE_NORMAL,&sfi,sizeof(sfi),SHGFI_SMALLICON | SHGFI_SYSICONINDEX | SHGFI_USEFILEATTRIBUTES | (bSelected ? SHGFI_OPENICON : 0);return sfi.iIcon;return -1;-创建图形列表并和CListCtrl关联:m_image_list.Create(IDB_CALLER2, 16, 10,
33、RGB(192,192, 192); m_image_list.SetBkColor( GetSysColor( COLOR_WINDOW ) );m_caller_list.SetImageList( &m_image_list, LVSIL_SMALL);为报表添加4列:char *szColumn="昵称","IP地址","登陆时间","状态"int widths=100,98,70,55;LV_COLUMN lvc;lvc.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVC
34、F_SUBITEM;lvc.fmt=LVCFMT_LEFT;for(int i=0;i<4;i+) /插入各列lvc.pszText=szColumni;lvc.cx=widthsi;lvc.iSubItem=i;m_caller_list.InsertColumn(i,&lvc);先注明一下,这里,我们用m_listctrl来表示一个CListCtrl的类对象,然后这里我们的ListCtrl都是report形式,至于其他的如什么大图标,小图标的暂时不讲,毕竟report是大众话的使用。其次,我们这里用条款一,条款二来描述第一点,第二点,这个是参照Effective C+的叫法,
35、俺觉得这么叫比较COOL :)条款一:设置ListCtrl的风格在CSDN上常常看到有人问怎么设置风格的,他们ListCtrl的样子是一个列表,有横条和竖条分界线,然后选中一行,要整一行都选中,而不是只有某一列被选中,等等,这里给一个比较全面的设置方法。/获得原有风格DWORD dwStyle = :GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE); dwStyle &= (LVS_TYPEMASK);dwStyle &= (LVS_EDITLABELS);/设置新风格SetWindowLong(m_listctrl.m_hWnd, GWL
36、_STYLE,dwStyle,|LVS_REPORT|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS);/设置扩展风格DWORD styles =LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES;ListView_SetExtendedListViewStyleEx(m_listctrl.m_hWnd, styles, styles );其中LVS_EX_FULLROWSELECT 就是前面说得整行选中LVS_EX_GRIDLINES 网格线(只适用与report风格的listctrl) LVS_EX_CHECK
37、BOXES 前面加个checkboxpListCtrl->SetExtendedStyle( m_listctrl.GetExtendedStyle() | LVS_EX_SUBITEMIMAGES);这也是一个很重要的属性,这样的话,可以在列表中加ICON,记得windows的任务管理器吗,你想做得那样,这个属性也要加哦,这个我以后会讲的 条款二:加入列头这是一个比较实质的东西,给列表框分列,然后加上列头代码说话,来了TCHAR rgtsz210 = _T("列头1"), _T("列头2");LV_COLUMN lvcolumn;CRect re
38、ct;m_listctrl.GetWindowRect(&rect);for(int i=0;i<2;i+)lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT| LVCF_WIDTH | LVCF_ORDER;lvcolumn.fmt = LVCFMT_LEFT;lvcolumn.pszText = rgtszi;lvcolumn.iSubItem = i;lvcolumn.iOrder = i;if(i=0)lvcolumn.cx = rect.Width()*3/5 ;elselvcolumn.cx = rect.Width
39、()*2/5;m_listctrl.InsertColumn(i, &lvcolumn);这是插入两列的做法,你要插入20列?随便你,依样画葫芦 lvcolumn.mask 中那个mask可以有各种属性,具体去看msdn吧,条款三:把记录,插入列表框中int nIndex = m_listctrl.GetItemCount();LV_ITEM lvitemAdd = 0;lvitemAdd.mask = LVIF_TEXT;lvitemAdd.iItem = nIndex ;lvitemAdd.iSubItem = 0;lvitemAdd.pszText =_T("毛毛1&q
40、uot;);if (m_listctrl.InsertItem(&lvitemAdd) != -1)LV_ITEM lvitem = 0;lvitem.mask = LVIF_TEXT;lvitem.iItem = nIndex ;lvitem.iSubItem = 1;lvitem.pszText =_T("毛毛2");m_listctrl.SetItem(&lvitem);nIndex 是当前的行数,然后把新的一行,插在最下面,条款四:给列表中插入图标在report格式中,也能插入图标继续代码说话m_image是个CImageList对象m_image.
41、Create(16,16, TRUE|ILC_COLOR24, 3, 1);m_listctrl.SetImageList(&m_image,LVSIL_SMALL);然后调用CImageList的成员函数int CImageList:Add( HICON hIcon ); 把ICON插入到imagelist,然后在插入记录的时候lvitemAdd.mask = LVIF_TEXT; lvitemAdd.mask =LVIF_TEXT|LVIF_IMAGE然后添加一个lvitemAdd.iImage = n;这个n是imagelist中的序号,表示是具体的哪一个图标,list么,呵呵条
42、款五: 插入记录时使用额外的信息,lParam 的使用有时候,你想对于某一行,加入一些额外的信息,那么就可以使用这个lParam是这么描述的Specifies the 32-bit value of the item 我上次是为了在某一行加入一个信息,窗口句柄,然后是这么加的, int nIndex = m_listctrl.GetItemCount();LV_ITEM lvitemAdd = 0;lvitemAdd.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;lvitemAdd.iItem = nIndex ;lvitemAdd.iSubItem = 0;l
43、vitemAdd.pszText =_T("毛毛1");lvitemAdd.iImage = n;lvitemAdd.lParam = (LPARAM)hwnd;(某个窗口的窗口句柄)if (m_listctrl.InsertItem(&lvitemAdd) != -1)LV_ITEM lvitem = 0;lvitem.mask = LVIF_TEXT;lvitem.iItem = nIndex ;lvitem.iSubItem = 1;lvitem.pszText =_T("毛毛2");m_listctrl.SetItem(&lvit
44、em);ok,这是一个比较全的例子的,又插ICON,又使用PARAM的条款六 : 点击列表框,获取选中行信息响应NM_CLICK消息,如果你有MSDN,可以看到,有专门关于listview的 NM_CLICK的介绍void CMyDlg:OnItemClick(NMHDR* pNMHDR, LRESULT* pResult)/ TODO: Add your control notification handler code hereint nItem = -1;LPNMITEMACTIVATE lpNMItemActivate = (LPNMITEMACTIVATE)pNMHDR; if(lp
45、NMItemActivate != NULL)nItem = lpNMItemActivate->iItem;现在nItem就是点击选中那行的index了,有了index,获取那行的信息还难吗 ?懒汉说:难,因为你还没讲,晕,那就继续说条款七: 根据行的index,获取该行的信息直接上代码吧LV_ITEM lvitem = 0;lvitem.iItem = nIndex;lvitem.iSubItem = 0;lvitem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;m_listctrl.GetItem(&lvitem)这样,就把nindex,第
46、一列的信息取出来了,包括刚才我们加入的ICON,和那个 额外信息(窗口句柄),比如我要获取窗口句柄,就可以hwnd = (HWND)lvitem.lParam;mask 用来指明你想获取那些信息具体可以查msdn中LVITEM Structure的定义和CListCtrl:GetItem条款八:用程序选中某一行,使之选中选中之m_listctrl.SetItemState(nIndex,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED); 不选中,取消选中之m_listctrl.SetItemState(nIndex,0,LVIS_SE
47、LECTED|LVIS_FOCUSED);条款九:获取当前所有选中的行(多选)这个,俺就比较懒了,抄msdn的代码吧,反正很简单Example/ CListCtrl* pListCtrl = (CListCtrl*) GetDlgItem(IDC_YOURLISTCONTROL);ASSERT(pListCtrl != NULL);POSITION pos = pList->GetFirstSelectedItemPosition();if (pos = NULL)TRACE0("No items were selected!n");elsewhile (pos)in
48、t nItem = pList->GetNextSelectedItem(pos);TRACE1("Item %d was selected!n", nItem);/ you could do your own processing on nItem here条款十:删除条款九中选中的行这个相对前面九个条款是比较麻烦的,因为如果你要删除多行的话。往往要出错比如,我现在要删除第0行和第1行(列表的行序列是从0开始的) 那么好啊。我来删了m_listctrl.DeleteItem(0)m_listctrl.DeleteItem(1)恭喜你,错了,我好开心啊 :)因为你删除
49、第0行以后,下面的行会往上移,那么原来的第1行就变成了第0行,那么你再 m_listctrl.DeleteItem(1),那么删除的是原来的第行,真麻烦,所以,只有从下往上删,才是安全的,先删的,不会影响后面的操作, m_listctrl.DeleteItem(1)m_listctrl.DeleteItem(0)但有时候,我们也不知道要删除哪些行,只知道要删除选中的那些行,像条款九中的那些如果我们还是用POSITION pos = m_listctrl.GetFirstSelectedItemPosition();if (pos = NULL)TRACE0("No items wer
50、e selected!n");elsewhile (pos)int nItem = m_listctrl.GetNextSelectedItem(pos);m_listctrl.DeleteItem(nItem );你就等着收尸吧这时候我们就要B4微软了,为虾米木有GetLastselectedItemPosition 和GetPrevSelectedItem多写一对成员函数会死啊 :(没办法,办法自己想,这里有个笨办法POSITION sSelPos = NULL;while(sSelPos = m_listctrl.GetFirstSelectedItemPosition()in
51、t nSelItem = -1;nSelItem = m_listctrl.GetNextSelectedItem(sSelPos);if(nSelItem >= 0 && nSelItem<m_listctrl.GetItemCount() 好了,这个nSelItem 就是我们要的DDGetNextSelectedItem这个函数,看msdn的用法,其实是返回第一个的index,然后走到下一个选中的行去,所以这么做也是安全的,在实际中,俺也是这么做的,测试也通过,没问题的当然,还有个办法,先通过GetFirstSelectedItemPosition和GetNex
52、tSelectedItem来获取所有的选中行的index,然后把这些index放到一个数组里,然后再从下往上删唉真麻烦啊,还要不定数组,不说用new在堆上开吧,那么一个vector总是要的吧,麻烦啊所以我暂时是用上述的办法来删除,也供大家参考,希望能找到更好的办法VC中ListCtrl经验总结2009-10-21 20:30ListCtrl在工作中,常常用到,也常常看到大家发帖问怎么用这个控件,故总结了一下自己的使用经验,以供参考使用。先注明一下,这里,我们用m_listctrl来表示一个CListCtrl的类对象,然后这里我们的ListCtrl都是report形式,至于其他的如什么大图标,小图标的暂时不讲,毕竟report是大众话的使用。其次,我们这里用条款一,条款二来描述第一点,第二点,这个是参照Effective C+的叫法,俺觉得这么叫比较COOL :)条款一:设置ListCtrl的风格在CSDN上常常看到有人问怎么设置风格的,他们ListCtrl的样子是一个列表,有横条和竖条分界线,然后选中一行,要整一行都选中,而不是只有某一列被选中,等等,这里给一个比较全面的设置方法。/获得原有风格DWORD dwStyle = :GetWin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025技术转让合同范本
- 2025年软件评测师考试攻略分享试题及答案
- 设计师考试常见试题及答案
- 通过经验分享的试题及答案
- 无偿租门面合同协议书
- 确保结果的2025年网络规划设计师考试试题及答案
- 形成2025年系统分析师学习方法的思路试题及答案
- 演员表演面试题及答案
- 社会工作者对个案的有效干预试题及答案
- 重难点突破中级社会工作者试题及答案
- 2023年小学音乐期末综合评价方案
- 海南省三亚市(2024年)小学语文部编版小升初真题(知识梳理)完整试卷(含答案)
- 400字作文稿纸方格A4打印模板
- 物理八年级下册《第3节 摩擦力》课件
- (高清版)DZT 0073-2016 电阻率剖面法技术规程
- 中医养生祛湿
- 金属废料加工的废料分类与分拣技术
- 贷款贷款信用证授信协议书
- 人工智能伦理导论- 课件 3-人工智能伦理
- JY-T 0467-2015 初中体育器材设施配备标准
- 3D扫描与模型重建
评论
0/150
提交评论