clistctrl 使用技巧--小浪的博客.htm
来自「一个由MFC做的学生信息管理系统」· HTM 代码 · 共 171 行 · 第 1/4 页
HTM
171 行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>CListCtrl 使用技巧--小浪的博客</title>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
<META CONTENT="VC其它- VC常用小技巧 CListCtrl 使用技巧ACE_Message_Block功能简介 博客 博客中国 博客动力 blog blogdriver blogger 中国" NAME="description">
<META NAME="keywords" CONTENT="小浪的博客 VC其它- VC常用小技巧 CListCtrl 使用技巧ACE_Message_Block功能简介 博客 博客中国 博客动力 blog blogdriver blogger 中国">
<link href="diary.css" rel="stylesheet" type="text/css">
<script language="JavaScript" src="/jsp/js/UBB.js"></script>
<script type="text/javascript" src="/jsp/js/blog.js"></script>
</head>
<body>
<div style="width:750px;margin-left:auto;margin-right:auto;text-align:right;font-size:12px;">
<a href="http://www.bokee.com" target="_blank">首页</a> |
<a href="http://group.bokee.com" target="_blank">博客群</a> |
<a href="http://blogs.bokee.com" target="_blank">公社</a> |
<a href="http://column.bokee.com" target="_blank">专栏</a> |
<a href="http://bbs.bokee.com" target="_blank">论坛</a> |
<a href="http://photo.bokee.com" target="_blank">图片</a> |
<a href="http://news.bokee.com/" target="_blank">资讯</a> |
<a href="http://reg.bokee.com/account/web/register.jsp"><FONT COLOR="#FF6600">注册</FONT></a> |
<a href="http://help.bokee.com:8086/help/index.html" target="_blank">帮助</a> |
<a href="http://lianbo.booso.com" target="_blank"><FONT COLOR="#FF6600">博客联播</FONT></a> |
<a href="http://ping.bokee.com:81/memcm/random.b"><FONT COLOR="#FF6600">随机访问</FONT></a>
</div>
<div id="container">
<div id="header"><h1 class="title"><a href="index.html">小浪的博客</a></h1></div>
<div id="category"> <a href="6573495.html" title="上一篇">VC其它- VC常用小技巧 </a>- -|
<a href="index.html">回首页</a> | <a href="catalog_2007.html">2007年索引</a>
| - -<a href="6599558.html" title="下一篇">ACE_Message_Block功能简介 </a></div>
<div class="entity">
<h2 class="diaryTitle">CListCtrl 使用技巧</h2><B>关键词</B>: <a href="http://tag.bokee.com/tag/CListCtrl" target="_blank">CListCtrl</a> <a href="http://tag.bokee.com/tag/%CA%B9%D3%C3%BC%BC%C7%C9" target="_blank">使用技巧</a>
<p><p>摘自:<a href="http://blog.csdn.net/lixiaosan/archive/2006/04/07/653563.aspx">http://blog.csdn.net/lixiaosan/archive/2006/04/07/653563.aspx</a></p><p>CListCtrl 使用技巧<span class="Title"><br /></span></p><p>作者:lixiaosan<br />时间:04/06/2006<br /></p><p>以下未经说明,listctrl默认view 风格为report</p><p>相关类及处理函数<br /></p><p>MFC:CListCtrl类</p><p>SDK:以 “ListView_”开头的一些宏。如 ListView_InsertColumn<br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,102)"><span style="COLOR: rgb(153,51,0)">1. CListCtrl 风格</span></span></h3><p> LVS_ICON: 为每个item显示大图标<br /> LVS_SMALLICON: 为每个item显示小图标<br /> LVS_LIST: 显示一列带有小图标的item<br /> LVS_REPORT: 显示item详细资料</p><p> 直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”</p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">2. 设置listctrl 风格及扩展风格</span></h3><p> LONG lStyle;<br /> lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口style<br /> lStyle &= ~LVS_TYPEMASK; //清除显示方式位<br /> lStyle |= LVS_REPORT; //设置style<br /> SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置style<br /> <br /> DWORD dwStyle = m_list.GetExtendedStyle();<br /> dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)<br /> dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)<br /> dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件<br /> m_list.SetExtendedStyle(dwStyle); //设置扩展风格<br /> <br /> 注:listview的style请查阅msdn<br /> <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrflistviewstyles.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrflistviewstyles.asp</a><br /></p><p> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">3. 插入数据</span></h3><p><span style="COLOR: rgb(153,51,0)"></span><span style="COLOR: rgb(153,51,0)"></span> m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入列<br /> m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );<br /> int nRow = m_list.InsertItem(0, “11”);//插入行<br /> m_list.SetItemText(nRow, 1, “jacky”);//设置数据<br /></p><p> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(51,102,255)"><span style="COLOR: rgb(153,51,0)">4. 一直选中item</span></span></h3><span style="FONT-WEIGHT: bold"> </span>选中style中的Show selection always,或者在上面第2点中设置LVS_SHOWSELALWAYS<br /><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">5. 选中和取消选中一行</span></h3><p> int nIndex = 0;<br /> //选中<br /> m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);<br /> //取消选中<br /> m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);<br /> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">6. 得到listctrl中所有行的checkbox的状态</span></h3><p> m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);<br /> CString str;<br /> for(int i=0; i<m_list.getitemcount(); i++)<br="" /> {<br /> if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))<br /> {<br /> str.Format(_T("第%d行的checkbox为选中状态"), i);<br /> AfxMessageBox(str);<br /> }<br /> }<br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">7. 得到listctrl中所有选中行的序号</span></h3><h3><span style="COLOR: rgb(153,51,0)"></span></h3><p><span style="COLOR: rgb(153,51,0)"><br /></span> 方法一:<br /> CString str;<br /> for(int i=0; i<m_list.getitemcount(); i++)<br="" /> {<br /> if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )<br /> {<br /> str.Format(_T("选中了第%d行"), i);<br /> nbsp; AfxMessageBox(str);<br /> }<br /> }</p><p> 方法二:<br /> POSITION pos = m_list.GetFirstSelectedItemPosition();<br /> if (pos == NULL)<br /> TRACE0("No items were selected!\n");<br /> else<br /> {<br /> while (pos)<br /> {<br /> int nItem = m_list.GetNextSelectedItem(pos);<br /> TRACE1("Item %d was selected!\n", nItem);<br /> // you could do your own processing on nItem here<br /> }<br /> }<br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">8. 得到item的信息</span></h3><p> TCHAR szBuf[1024];<br /> LVITEM lvi;<br /> lvi.iItem = nItemIndex;<br /> lvi.iSubItem = 0;<br /> lvi.mask = LVIF_TEXT;<br /> lvi.pszText = szBuf;<br /> lvi.cchTextMax = 1024;<br /> m_list.GetItem(&lvi);</p><p> 关于得到设置item的状态,还可以参考msdn文章<br /> Q173242: Use Masks to Set/Get Item States in CListCtrl<br /> <a href="http://support.microsoft.com/kb/173242/en-us">http://support.microsoft.com/kb/173242/en-us</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(51,102,255)"><span style="COLOR: rgb(153,51,0)">9. 得到listctrl的所有列的header字符串内容</span></span></h3><p> LVCOLUMN lvcol;<br /> char str[256];<br /> int nColNum;<br /> CString strColumnName[4];//假如有4列</p><p> nColNum = 0;<br /> lvcol.mask = LVCF_TEXT;<br /> lvcol.pszText = str;<br /> lvcol.cchTextMax = 256;<br /> while(m_list.GetColumn(nColNum, &lvcol))<br /> { <br /> strColumnName[nColNum] = lvcol.pszText;<br /> nColNum++;<br /> }<br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">10. 使listctrl中一项可见,即滚动滚动条</span></h3> m_list.EnsureVisible(i, FALSE);<br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">11. 得到listctrl列数</span></h3> int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();<br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">12. 删除所有列</span></h3><p> 方法一:<br /> while ( m_list.DeleteColumn (0))<br /> 因为你删除了第一列后,后面的列会依次向上移动。</p><p> 方法二:<br /> int nColumns = 4;<br /> for (int i=nColumns-1; i>=0; i--)<br /> m_list.DeleteColumn (i);<br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">13. 得到单击的listctrl的行列号</span></h3><p> 添加listctrl控件的NM_CLICK消息相应函数<br /> void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)<br /> {<br /> // 方法一:<br /> /*<br /> DWORD dwPos = GetMessagePos();<br /> CPoint point( LOWORD(dwPos), HIWORD(dwPos) );<br /> <br /> m_list.ScreenToClient(&point);<br /> <br /> LVHITTESTINFO lvinfo;<br /> lvinfo.pt = point;<br /> lvinfo.flags = LVHT_ABOVE;<br /> <br /> int nItem = m_list.SubItemHitTest(&lvinfo);<br /> if(nItem != -1)<br /> {<br /> CString strtemp;<br /> strtemp.Format("单击的是第%d行第%d列", lvinfo.iItem, lvinfo.iSubItem);<br /> AfxMessageBox(strtemp);<br /> }<br /> */<br /> <br /> // 方法二:<br /> /*<br /> NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;<br /> if(pNMListView->iItem != -1)<br /> {<br /> CString strtemp;<br /> strtemp.Format("单击的是第%d行第%d列",<br /> pNMListView->iItem, pNMListView->iSubItem);<br /> AfxMessageBox(strtemp);<br /> }<br /> */<br /> *pResult = 0;<br /> }<br /></p><p> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">14. 判断是否点击在listctrl的checkbox上</span></h3><p> 添加listctrl控件的NM_CLICK消息相应函数<br /> void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)<br /> {<br /> DWORD dwPos = GetMessagePos();<br /> CPoint point( LOWORD(dwPos), HIWORD(dwPos) );<br /> <br /> m_list.ScreenToClient(&point);<br /> <br /> LVHITTESTINFO lvinfo;<br /> nbsp; lvinfo.pt = point;<br /> lvinfo.flags = LVHT_ABOVE;<br /> <br /> UINT nFlag;<br /> int nItem = m_list.HitTest(point, &nFlag);<br /> //判断是否点在checkbox上<br /> if(nFlag == LVHT_ONITEMSTATEICON)<br /> {<br /> AfxMessageBox("点在listctrl的checkbox上");<br /> } <br /> *pResult = 0;<br /> }<br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">15. 右键点击listctrl的item弹出菜单</span></h3><p> 添加listctrl控件的NM_RCLICK消息相应函数<br /> void CTest6Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)<br /> {<br /> NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;<br /> if(pNMListView->iItem != -1)<br /> {<br /> DWORD dwPos = GetMessagePos();<br /> CPoint point( LOWORD(dwPos), HIWORD(dwPos) );<br /> <br /> CMenu menu;<br /> VERIFY( menu.LoadMenu( IDR_MENU1 ) );<br /> CMenu* popup = menu.GetSubMenu(0);<br /> ASSERT( popup != NULL );<br /> popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );<br /> } <br /> *pResult = 0;<br /> }<br /></p><p><br /></p><p> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">16. item切换焦点时(包括用键盘和鼠标切换item时),状态的一些变化顺序</span></h3><p> 添加listctrl控件的LVN_ITEMCHANGED消息相应函数<br /> void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)<br /> {<br /> NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;<br /> // TODO: Add your control notification handler code here<br /> <br /> CString sTemp;<br /> <br /> if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED && <br /> (pNMListView->uNewState & LVIS_FOCUSED) == 0)<br /> {<br /> sTemp.Format("%d losted focus",pNMListView->iItem);<br /> }<br /> else if((pNMListView->uOldState & LVIS_FOCUSED) == 0 &&<br /> (pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED)<br /> {<br /> sTemp.Format("%d got focus",pNMListView->iItem);<br /> } <br /> <br /> if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&<br /> (pNMListView->uNewState & LVIS_SELECTED) == 0)<br /> {<br /> sTemp.Format("%d losted selected",pNMListView->iItem);<br /> }<br /> else if((pNMListView->uOldState & LVIS_SELECTED) == 0 &&<br /> (pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)<br /> {<br /> sTemp.Format("%d got selected",pNMListView->iItem);<br /> }<br /> <br /> *pResult = 0;<br /> }</p><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">17. 得到另一个进程里的listctrl控件的item内容</span><span style="COLOR: rgb(51,102,255)"></span></h3><h3><span style="COLOR: rgb(51,102,255)"></span></h3><span style="COLOR: rgb(51,102,255)"></span><a href="http://www.codeproject.com/threads/int64_memsteal.asp">http://www.codeproject.com/threads/int64_memsteal.asp</a><br /><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(51,102,255)"><span style="COLOR: rgb(153,51,0)">18. 选中listview中的item</span></span> </h3>Q131284: How To Select a Listview Item Programmatically<br /><a href="http://support.microsoft.com/kb/131284/en-us">http://support.microsoft.com/kb/131284/en-us</a><br /><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">19. 如何在CListView中使用CListCtrl的派生类</span></h3><p><a href="http://www.codeguru.com/cpp/controls/listview/introduction/article.php/c919/">http://www.codeguru.com/cpp/controls/listview/introduction/article.php/c919/</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">20. listctrl的subitem添加图标</span></h3><p> m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);<br /> m_list.SetItem(..); //具体参数请参考msdn<br /></p><p> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">21. 在CListCtrl显示文件,并根据文件类型来显示图标</span></h3><p> 网上找到的代码,share<br /> BOOL CTest6Dlg::OnInitDialog()<br /> {<br /> CDialog::OnInitDialog();<br /> <br /> HIMAGELIST himlSmall;<br /> HIMAGELIST himlLarge;<br /> SHFILEINFO sfi;<br /> char cSysDir[MAX_PATH];<br /> String strBuf;<br /> <br /> memset(cSysDir, 0, MAX_PATH);<br /> <br /> GetWindowsDirectory(cSysDir, MAX_PATH);<br /> strBuf = cSysDir;<br /> sprintf(cSysDir, "%s", strBuf.Left(strBuf.Find("<a href="file:///" ?="" )+1="">\\")+1</a>));<br /> <br /> himlSmall = (HIMAGELIST)SHGetFileInfo ((LPCSTR)cSysDir, <br /> 0, <br /> &sfi, <br /> sizeof(SHFILEINFO), <br /> SHGFI_SYSICONINDEX | SHGFI_SMALLICON );<br /> <br /> himlLarge = (HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir, <br /> 0, <br /> &sfi, <br /> sizeof(SHFILEINFO), <br /> SHGFI_SYSICONINDEX | SHGFI_LARGEICON);<br /> <br /> if (himlSmall && himlLarge)<br /> {<br /> ::SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST,<br /> (WPARAM)LVSIL_SMALL, (LPARAM)himlSmall);<br /> ::SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST,<br /> (WPARAM)LVSIL_NORMAL, (LPARAM)himlLarge);<br /> }<br /> return TRUE; // return TRUE unless you set the focus to a control<br /> }<br /> <br /> void CTest6Dlg::AddFiles(LPCTSTR lpszFileName, BOOL bAddToDocument)<br /> {<br /> int nIcon = GetIconIndex(lpszFileName, FALSE, FALSE);<br /> CString strSize;<br /> CFileFind filefind;<br /> <br /> // get file size<br /> if (filefind.FindFile(lpszFileName))<br /> {<br /> filefind.FindNextFile();<br /> strSize.Format("%d", filefind.GetLength());<br /> }<br /> else<br /> strSize = "0";<br /> <br /> // split path and filename<br /> CString strFileName = lpszFileName;<br /> CString strPath;<br /> <br /> int nPos = strFileName.ReverseFind('\\');<br /> if (nPos != -1)<br /> {<br /> strPath = strFileName.Left(nPos);<br /> strFileName = strFileName.Mid(nPos + 1);<br /> }<br /> <br /> // insert to list<br /> int nItem = m_list.GetItemCount();<br /> m_list.InsertItem(nItem, strFileName, nIcon);<br /> m_list.SetItemText(nItem, 1, strSize);<br /> m_list.SetItemText(nItem, 2, strFileName.Right(3));<br /> m_list.SetItemText(nItem, 3, strPath);<br /> }<br /> <br /> int CTest6Dlg::GetIconIndex(LPCTSTR lpszPath, BOOL bIsDir, BOOL bSelected)<br /> {<br /> SHFILEINFO sfi;<br /> memset(&sfi, 0, sizeof(sfi));<br /> <br /> if (bIsDir)<br /> {<br /> SHGetFileInfo(lpszPath, <br /> FILE_ATTRIBUTE_DIRECTORY, <br /> &sfi, <br /> sizeof(sfi), <br /> SHGFI_SMALLICON | SHGFI_SYSICONINDEX |<br /> SHGFI_USEFILEATTRIBUTES |(bSelected ? SHGFI_OPENICON : 0)); <br /> return sfi.iIcon;<br /> }<br /> else<br /> {<br /> SHGetFileInfo (lpszPath, <br /> FILE_ATTRIBUTE_NORMAL, <br />   &sfi, <br /> sizeof(sfi), <br /> SHGFI_SMALLICON | SHGFI_SYSICONINDEX | <br /> SHGFI_USEFILEATTRIBUTES | (bSelected ? SHGFI_OPENICON : 0));<br /> return sfi.iIcon;<br /> }<br /> return -1;<br /> }<br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">22. listctrl内容进行大数据量更新时,避免闪烁</span></h3><p> m_list.SetRedraw(FALSE);<br /> //更新内容<br /> m_list.SetRedraw(TRUE);<br /> m_list.Invalidate();<br /> m_list.UpdateWindow();<br /> <br />或者参考 <br /></p><p><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.setredraw.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.setredraw.asp</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">23. listctrl排序 </span></h3><p>Q250614:How To Sort Items in a CListCtrl in Report View<br /><a href="http://support.microsoft.com/kb/250614/en-us">http://support.microsoft.com/kb/250614/en-us</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">24. 在listctrl中选中某个item时动态改变其icon或bitmap</span></h3>Q141834: How to change the icon or the bitmap of a CListCtrl item in Visual C++<br /><a href="http://support.microsoft.com/kb/141834/en-us">http://support.microsoft.com/kb/141834/en-us</a><br /><br /><br /><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">25. 在添加item后,再InsertColumn()后导致整列数据移动的问题</span></h3><p>Q151897: CListCtrl::InsertColumn() Causes Column Data to Shift <br /><a href="http://support.microsoft.com/kb/151897/en-us">http://support.microsoft.com/kb/151897/en-us</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">26. 关于listctrl第一列始终居左的问题</span></h3><p>解决办法:把第一列当一个虚列,从第二列开始插入列及数据,最后删除第一列。<br /> <br />具体解释参阅 <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/structures/lvcolumn.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/structures/lvcolumn.asp</a><br /></p><p> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">27. 锁定column header的拖动</span></h3><p><a href="http://msdn.microsoft.com/msdnmag/issues/03/06/CQA/">http://msdn.microsoft.com/msdnmag/issues/03/06/CQA/</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3 style="COLOR: rgb(153,51,0)">28. 如何隐藏clistctrl的列</h3><p> 把需隐藏的列的宽度设为0,然后检测当该列为隐藏列时,用上面第27点的锁定column 的拖动来实现<br /><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">29. listctrl进行大数据量操作时,使用virtual list </span> </h3><p><a href="http://www.microsoft.com/msj/archive/S2061.aspx">http://www.microsoft.com/msj/archive/S2061.aspx</a><br /><a href="http://www.codeguru.com/cpp/controls/listview/advanced/article.php/c4151/">http://www.codeguru.com/cpp/controls/listview/advanced/article.php/c4151/</a><br /><a href="http://www.codeproject.com/listctrl/virtuallist.asp">http://www.codeproject.com/listctrl/virtuallist.asp</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">30. 关于item只能显示259个字符的问题</span></h3><p>解决办法:需要在item上放一个edit。<br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">31. 响应在listctrl的column header上的鼠标右键单击</span></h3><p>Q125694: How To Find Out Which Listview Column Was Right-Clicked<br /><a href="http://support.microsoft.com/kb/125694/en-us">http://support.microsoft.com/kb/125694/en-us</a><br /></p><p><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">32. 类似于windows资源管理器的listview</span></h3><p>Q234310: How to implement a ListView control that is similar to Windows Explorer by using DirLV.exe<br /><a href="http://support.microsoft.com/kb/234310/en-us">http://support.microsoft.com/kb/234310/en-us</a><br /></p><p> </p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3 style="COLOR: rgb(153,51,0)">33. 在ListCtrl中OnTimer只响应两次的问题</h3><p>Q200054:<br />PRB: OnTimer() Is Not Called Repeatedly for a List Control<br /><a href="http://support.microsoft.com/kb/200054/en-us">http://support.microsoft.com/kb/200054/en-us</a><br /></p><hr style="WIDTH: 100%; HEIGHT: 2px" /><h3><span style="COLOR: rgb(153,51,0)">34. 以下为一些为实现各种自定义功能的listctrl派生类</span></h3><p> (1) <span style="COLOR: rgb(153,51,0)">拖放</span> <br /> <a href="http://www.codeproject.com/listctrl/dragtest.asp">http://www.codeproject.com/listctrl/dragtest.asp</a></p><p> <span style="COLOR: rgb(153,51,0)">在CListCtrl和CTreeCtrl间拖放</span><br /> <a href="http://support.microsoft.com/kb/148738/en-us">http://support.microsoft.com/kb/148738/en-us</a><br /> <br /> (2) <span style="COLOR: rgb(153,51,0)">多功能listctrl</span><br /> 支持subitem可编辑,图标,radiobutton,checkbox,字符串改变颜色的类<br /> <a href="http://www.codeproject.com/listctrl/quicklist.asp">http://www.codeproject.com/listctrl/quicklist.asp</a><br /> <br /> <span style="COLOR: rgb(153,51,0)">支持排序,subitem可编辑,subitem图标,subitem改变颜色的类</span><br /> <a href="http://www.codeproject.com/listctrl/ReportControl.asp">http://www.codeproject.com/listctrl/ReportControl.asp</a></p><p> (3) <span style="COLOR: rgb(153,51,0)">subitem中显示超链接</span><br /> <a href="http://www.codeproject.com/listctrl/CListCtrlLink.asp">http://www.codeproject.com/listctrl/CListCtrlLink.asp</a></p><p> (4) <span style="COLOR: rgb(153,51,0)">subitem的tooltip提示</span><br /> <a href="http://www.codeproject.com/listctrl/ctooltiplstctrl.asp">http://www.codeproject.com/listctrl/ctooltiplistctrl.asp</a></p><p> (5) <span style="COLOR: rgb(153,51,0)"> subitem中显示进度条</span> <br /> <a href="http://www.codeproject.com/listctrl/ProgressListControl.asp">http://www.codeproject.com/listctrl/ProgressListControl.asp</a><br /> <a href="http://www.codeproject.com/listctrl/napster.asp">http://www.codeproject.com/listctrl/napster.asp</a><br /> <a href="http://www.codeguru.com/Cpp/controls/listview/article.php/c4187/">http://www.codeguru.com/Cpp/controls/listview/article.php/c4187/</a></p><p> (6) <span style="COLOR: rgb(153,51,0)">动态改变subitem的颜色和背景色</span><br /> <a href="http://www.codeproject.com/listctrl/highlightlistctrl.asp">http://www.codeproject.com/listctrl/highlightlistctrl.asp</a><br /> <a href="http://www.codeguru.com/Cpp/controls/listbox/colorlistboxes/article.php/c4757/">http://www.codeguru.com/Cpp/controls/listbox/colorlistboxes/article.php/c4757/</a><br /> <br /> (7) <span style="COLOR: rgb(153,51,0)">类vb属性对话框</span><br /> <a href="http://www.codeproject.com/listctrl/propertylistctrl.asp">http://www.codeproject.com/listctrl/propertylistctrl.asp</a><br /> <a href="http://www.codeguru.com/Cpp/controls/listview/propertylists/article.php/c995/">http://www.codeguru.com/Cpp/controls/listview/propertylists/article.php/c995/</a> <br /> <a href="http://www.codeguru.com/Cpp/controls/listview/propertylists/article.php/c1041/">http://www.codeguru.com/Cpp/controls/listview/propertylists/article.php/c1041/</a> <br /> <br /> (8) <span style="COLOR: rgb(153,51,0)">选中subitem(只高亮选中的item)</span><br /> <a href="http://www.codeproject.com/listctrl/SubItemSel.asp">http://www.codeproject.com/listctrl/SubItemSel.asp</a><br /> <a href="http://www.codeproject.com/listctrl/ListSubItSel.asp">http://www.codeproject.com/listctrl/ListSubItSel.asp</a><br /> <br /> (9) <span style="COLOR: rgb(153,51,0)">改变行高</span><br /> <a href="http://www.codeproject.com/listctrl/changerowheight.asp">http://www.codeproject.com/listctrl/changerowheight.asp</a><br /> <br /> (10) <span style="COLOR: rgb(153,51,0)">改变行颜色</span><br /> <a href="http://www.codeproject.com/listctrl/coloredlistctrl.asp">http://www.codeproject.com/listctrl/coloredlistctrl.asp</a><br /> <br /> (11) <span style="COLOR: rgb(153,51,0)">可编辑subitem的listctrl</span><br /> <a href="http://www.codeproject.com/listctrl/nirs2000.asp">http://www.codeproject.com/listctrl/nirs2000.asp</a><br /> <a href="http://www.codeproject.com/listctrl/editing_subitems_in_listcontrol.asp">http://www.codeproject.com/listctrl/editing_subitems_in_listcontrol.asp</a><br /> <br /> (12) <span style="COLOR: rgb(153,51,0)">subitem可编辑,插入combobox,改变行颜色,subitem的tooltip提示</span><br /> <a href="http://www.codeproject.com/listctrl/reusablelistcontrol.asp">http://www.codeproject.com/listctrl/reusablelistcontrol.asp</a><br /> <br /> (13) <span style="COLOR: rgb(153,51,0)">header 中允许多行字符串</span><br /> <a href="http://www.codeproject.com/listctrl/headerctrlex.asp">http://www.codeproject.com/listctrl/headerctrlex.asp</a><br /> <br /> (14) <span style="COLOR: rgb(153,51,0)">插入combobox</span><br /> <a href="http://www.codeguru.com/Cpp/controls/listview/editingitemsandsubitem/article.php/c979/">http://www.codeguru.com/Cpp/controls/listview/editingitemsandsubitem/article.php/c979/</a><br /> <br /> (15) <span style="COLOR: rgb(153,51,0)">添加背景图片</span><br /> <a href="http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c4173/">http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c4173/</a><br /> <a href="http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c983/">http://www.codeguru.com/Cpp/controls/listview/backgroundcolorandimage/article.php/c983/</a><br /> <a href="http://www.vchelp.net/vchelp/archive.asp?type_id=9&class_id=1&cata_id=1&article_id=1088&search_term">http://www.vchelp.net/vchelp/archive.asp?type_id=9&class_id=1&cata_id=1&article_id=1088&search_term</a>=<br /> <br /> (16) <span style="COLOR: rgb(153,51,0)">自适应宽度的listctrl</span><br /> <a href="http://www.codeproject.com/useritems/AutosizeListCtrl.asp">http://www.codeproject.com/useritems/AutosizeListCtrl.asp</a><br /></p><p> (17) <span style="COLOR: rgb(153,51,0)">改变ListCtrl高亮时的颜色(默认为蓝色)</span><br /> 处理<code><font face="新宋体"> NM_CUSTOMDRAW <br /> </font><a href="http://www.codeproject.com/listctrl/lvcustomdraw.asp"><font face="新宋体">http://www.codeproject.com/listctrl/lvcustomdraw.asp</font></a></code></p><p><code><font face="新宋体"> (18) 改变header颜色<br /> </font><ahref="http://www.pocketpcdn.com/articles/hdr_color.html"><font face="新宋体">http://www.pocketpcdn.com/articles/hdr_color.html</font></a><br /></code></p></p>
<p class="diaryFoot">【作者: <a href="javascript:void(0);" onClick="window.open('http://publishblog.blogchina.com/blog/postMessage.b?receiver=2091429','发送短消息','width=520, height=455')">小浪</a>】【访问统计:<script language="JavaScript" src="http://counter.blogchina.com/PageServlet?pageid=6573504&blogid=2087647"></script>】【2007年12月20日 星期四 10:15】【<a href="http://reg.bokee.com/account/web/register.jsp"><FONT COLOR="#FF6600">注册</FONT></a>】【<a href="javascript:window.print();" >打印</a>】 </td>
</p>
</div>
<div class="col-body">
<script language="JavaScript" src="/jsp/js/request_ads.js?id=1000"></script>
<script src='http://pagead2.googlesyndication.com/pagead/show_ads.js'></script>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?