﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Mumoo</title><link>http://www.cppblog.com/Mumoo/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:39:30 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:39:30 GMT</pubDate><ttl>60</ttl><item><title>禁止ListCtrl表头拖动</title><link>http://www.cppblog.com/Mumoo/archive/2013/11/18/204301.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Mon, 18 Nov 2013 01:33:00 GMT</pubDate><guid>http://www.cppblog.com/Mumoo/archive/2013/11/18/204301.html</guid><wfw:comment>http://www.cppblog.com/Mumoo/comments/204301.html</wfw:comment><comments>http://www.cppblog.com/Mumoo/archive/2013/11/18/204301.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Mumoo/comments/commentRss/204301.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Mumoo/services/trackbacks/204301.html</trackback:ping><description><![CDATA[<p><span style="color: red">转载~~~~~~~~~~~~源地址忘记了~~~~~~</span><br />禁止ListCtrl表头拖动（Prevent CListCtrl column resizing）<br />/*The header control in the ListView control sends notification to the parent window (e.i. the ListView) before it begins resizing a column. We can override the OnNotify() function in the CListCtrl derived class to handle this notification. The code below prevents resizing of all columns. Note that the resize cursor still shows up. */<br />BOOL CMyListCtrl::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) <br />{ <br />switch (((NMHDR*)lParam)-&gt;code) <br />{ <br />case HDN_BEGINTRACKW: <br />case HDN_BEGINTRACKA: <br />*pResult = TRUE; // disable tracking <br />return TRUE; // Processed message <br />} </p>
<p>return CListCtrl::OnNotify(wParam, lParam, pResult); <br />}&nbsp;&nbsp; <br />/*<br />If you want to prevent resizing of only one column, you should check for the value in iItem field of the HD_NOTIFY structure. The code below stops only the first column from being resized. */</p>
<p>BOOL CMyListCtrl::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) <br />{ <br />HD_NOTIFY *pHDN = (HD_NOTIFY*)lParam; </p>
<p>if((pHDN-&gt;hdr.code == HDN_BEGINTRACKW || pHDN-&gt;hdr.code == HDN_BEGINTRACKA) <br />&amp;&amp; pHDN-&gt;iItem == 0) // Prevent only first (col# 0) from resizing <br />{ <br />*pResult = TRUE; // disable tracking <br />return TRUE; // Processed message <br />} </p>
<p>return CListCtrl::OnNotify(wParam, lParam, pResult); <br />}&nbsp; </p><img src ="http://www.cppblog.com/Mumoo/aggbug/204301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Mumoo/" target="_blank">Mumoo</a> 2013-11-18 09:33 <a href="http://www.cppblog.com/Mumoo/archive/2013/11/18/204301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CStdioFile用法 随笔</title><link>http://www.cppblog.com/Mumoo/archive/2013/10/23/203883.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Wed, 23 Oct 2013 01:56:00 GMT</pubDate><guid>http://www.cppblog.com/Mumoo/archive/2013/10/23/203883.html</guid><wfw:comment>http://www.cppblog.com/Mumoo/comments/203883.html</wfw:comment><comments>http://www.cppblog.com/Mumoo/archive/2013/10/23/203883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Mumoo/comments/commentRss/203883.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Mumoo/services/trackbacks/203883.html</trackback:ping><description><![CDATA[<p><span style="color: red"><strong>向已存在的文件中插入首行</strong></span><br />BOOL AddTitleColumn(CString &amp;sTxtFile)<br />{<br />&nbsp;CStdioFile stdFile;<br />&nbsp;if ( stdFile.Open(sTxtFile,&nbsp; CFile::modeCreate | CFile::modeNoTruncate <br />&nbsp;&nbsp;| CFile::modeReadWrite|CFile::shareExclusive) )<br />&nbsp;{<br />&nbsp;&nbsp;CIni ini(CCommonFun::GetExecutablePath() +"Config.ini");<br />&nbsp;&nbsp;CString sTitleRow = ini.GetString("ListCtrl", "ViewColumName");</p>
<p>&nbsp;&nbsp;CStringArray arrLines;<br />&nbsp;&nbsp;arrLines.Add(sTitleRow);</p>
<p>&nbsp;&nbsp;stdFile.SeekToBegin();<br />&nbsp;&nbsp;CString str;<br />&nbsp;&nbsp;while(stdFile.ReadString(str))<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;arrLines.Add(str);<br />&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;stdFile.SeekToBegin();<br />&nbsp;&nbsp;int nCount = arrLines.GetSize();<br />&nbsp;&nbsp;for ( int i = 0; i &lt; nCount; i++ )<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;CString sContent;<br />&nbsp;&nbsp;&nbsp;if (i &gt; 0)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;sContent.Format("%d,%s", i, arrLines[i]);<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;sContent = arrLines[i];<br />&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;stdFile.WriteString (sContent);<br />&nbsp;&nbsp;&nbsp;stdFile.WriteString ("\n");<br />&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;stdFile.Close();<br />&nbsp;&nbsp;return TRUE;<br />&nbsp;}<br />&nbsp;return FALSE;<br />}<br /><br /><span style="color: red"><strong>生成一个带标题的文件</strong></span><br /></p>
<p>BOOL CBarView::ExportDataFile(CString sDataFile/*, CStringArray &amp;arsWriteString*/)<br />{<br />&nbsp;CStdioFile stdFile;<br />&nbsp;if ( stdFile.Open(sDataFile,&nbsp; CFile::modeCreate | CFile::modeNoTruncate <br />&nbsp;&nbsp;| CFile::modeReadWrite|CFile::shareExclusive) )<br />&nbsp;{<br />&nbsp;&nbsp;CString sTitleRow =&nbsp;"序号,文件名,份数,页数";<br />&nbsp;&nbsp;stdFile.WriteString (sTitleRow);<br />&nbsp;&nbsp;stdFile.WriteString ("\n");</p>
<p>&nbsp;&nbsp;for (int i = 0; i &lt; (int)m_data.data.size(); i++)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;CString sLineData;<br />&nbsp;&nbsp;&nbsp;for (int j = 0; j &lt; (int)m_data.data.at(i).size(); j++)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;CString sData = m_data.data.at(i).at(j);<br />&nbsp;&nbsp;&nbsp;&nbsp;if (j != 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sData.Format(", %s", sData);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sData.Format("%s", sData);<br />&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;sLineData += sData;<br />&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;CString sLine;<br />&nbsp;&nbsp;&nbsp;sLine.Format("%d, %s", (i+1), sLineData);<br />&nbsp;&nbsp;&nbsp;stdFile.WriteString (sLine);<br />&nbsp;&nbsp;&nbsp;stdFile.WriteString ("\n");<br />&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;stdFile.Close();<br />&nbsp;&nbsp;return TRUE;<br />&nbsp;}</p>
<p>&nbsp;LOG("创建文件 %s 失败", sDataFile);<br />&nbsp;return FALSE;<br />}</p><img src ="http://www.cppblog.com/Mumoo/aggbug/203883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Mumoo/" target="_blank">Mumoo</a> 2013-10-23 09:56 <a href="http://www.cppblog.com/Mumoo/archive/2013/10/23/203883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ListCtrl Relate</title><link>http://www.cppblog.com/Mumoo/archive/2013/10/10/203631.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Thu, 10 Oct 2013 02:51:00 GMT</pubDate><guid>http://www.cppblog.com/Mumoo/archive/2013/10/10/203631.html</guid><wfw:comment>http://www.cppblog.com/Mumoo/comments/203631.html</wfw:comment><comments>http://www.cppblog.com/Mumoo/archive/2013/10/10/203631.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Mumoo/comments/commentRss/203631.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Mumoo/services/trackbacks/203631.html</trackback:ping><description><![CDATA[获取总列数：int columns = m_listCtrl-&gt;GetHeaderCtrl()-&gt;GetItemCount();<br />删除所有列数：while(m_listCtrl-&gt;DeleteColumn(0));<img src ="http://www.cppblog.com/Mumoo/aggbug/203631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Mumoo/" target="_blank">Mumoo</a> 2013-10-10 10:51 <a href="http://www.cppblog.com/Mumoo/archive/2013/10/10/203631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ListCtrl控件方法</title><link>http://www.cppblog.com/Mumoo/archive/2013/04/15/199461.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Mon, 15 Apr 2013 09:20:00 GMT</pubDate><guid>http://www.cppblog.com/Mumoo/archive/2013/04/15/199461.html</guid><wfw:comment>http://www.cppblog.com/Mumoo/comments/199461.html</wfw:comment><comments>http://www.cppblog.com/Mumoo/archive/2013/04/15/199461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Mumoo/comments/commentRss/199461.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Mumoo/services/trackbacks/199461.html</trackback:ping><description><![CDATA[<div id="content" class="content mod-cs-content text-content clearfix" sizset="0" sizcache03751642967829892="1">
<p>在网上查找的ListCtrl方法<br /></p>
<p>以下未经说明，<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>默认<span style="line-height: 1.3em">view</span><wbr><wbr><wbr><wbr>风格为<span style="line-height: 1.3em">report</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">-------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">1. CListCtrl </span><wbr><wbr><wbr><wbr>风格 <br /><span style="line-height: 1.3em">LVS_ICON: </span><wbr><wbr><wbr><wbr>为每个<span style="line-height: 1.3em">item</span><wbr><wbr><wbr><wbr>显示大图标<br /><span style="line-height: 1.3em">LVS_SMALLICON: </span><wbr><wbr><wbr><wbr>为每个<span style="line-height: 1.3em">item</span><wbr><wbr><wbr><wbr>显示小图标<br /><span style="line-height: 1.3em">LVS_LIST: </span><wbr><wbr><wbr><wbr>显示一列带有小图标的<span style="line-height: 1.3em">item</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">LVS_REPORT: </span><wbr><wbr><wbr><wbr>显示<span style="line-height: 1.3em">item</span><wbr><wbr><wbr><wbr>详细资料<br />直观的理解：<span style="line-height: 1.3em">windows</span><wbr><wbr><wbr><wbr>资源管理器，<span style="line-height: 1.3em">"</span><wbr><wbr><wbr><wbr>查看<span style="line-height: 1.3em">"</span><wbr><wbr><wbr><wbr>标签下的<span style="line-height: 1.3em">"</span><wbr><wbr><wbr><wbr>大图标，小图标，列表，详细资料<br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">2. </span><wbr><wbr><wbr><wbr>设置<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>风格及扩展风格 <br /><span style="line-height: 1.3em">LONG lStyle;</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//</span><wbr><wbr><wbr><wbr>获取当前窗口<span style="line-height: 1.3em">style</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">lStyle &amp;= ~LVS_TYPEMASK; //</span><wbr><wbr><wbr><wbr>清除显示方式位<br /><span style="line-height: 1.3em">lStyle |= LVS_REPORT; //</span><wbr><wbr><wbr><wbr>设置<span style="line-height: 1.3em">style</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//</span><wbr><wbr><wbr><wbr>设置<span style="line-height: 1.3em">style</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">DWORD dwStyle = m_list.GetExtendedStyle();</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">dwStyle |= LVS_EX_FULLROWSELECT;//</span><wbr><wbr><wbr><wbr>选中某行使整行高亮（只适用与<span style="line-height: 1.3em">report</span><wbr><wbr><wbr><wbr>风格的<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>）<br /><span style="line-height: 1.3em">dwStyle |= LVS_EX_GRIDLINES;//</span><wbr><wbr><wbr><wbr>网格线（只适用与<span style="line-height: 1.3em">report</span><wbr><wbr><wbr><wbr>风格的<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>）<br /><span style="line-height: 1.3em">dwStyle |= LVS_EX_CHECKBOXES;//item</span><wbr><wbr><wbr><wbr>前生成<span style="line-height: 1.3em">checkbox</span><wbr><wbr><wbr><wbr>控件<br /><span style="line-height: 1.3em">m_list.SetExtendedStyle(dwStyle); //</span><wbr><wbr><wbr><wbr>设置扩展风格<br />注：<span style="line-height: 1.3em">listview</span><wbr><wbr><wbr><wbr>的<span style="line-height: 1.3em">style</span><wbr><wbr><wbr><wbr>请查阅<span style="line-height: 1.3em">msdn </span><wbr><wbr><wbr><wbr><br /><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrflistviewstyles.asp" target="_blank"><span style="line-height: 1.3em; color: rgb(0,0,0)">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrflistviewstyles.asp</span><wbr><wbr><wbr><wbr></a><wbr><wbr><wbr><wbr><span style="color: rgb(0,0,0)"><br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">3. </span><wbr><wbr><wbr><wbr>插入数据 <br /><span style="line-height: 1.3em">m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//</span><wbr><wbr><wbr><wbr>插入列<br /><span style="line-height: 1.3em">m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );</span><wbr><wbr><wbr><wbr></span></p>
<p><span style="color: rgb(0,0,0)">//新插入的在上面<br /><span style="line-height: 1.3em">int nRow = m_list.InsertItem(0, "11");// </span><wbr><wbr><wbr><wbr>插入行<br /><span style="line-height: 1.3em">m_list.SetItemText(nRow, 1, "jacky");//</span><wbr><wbr><wbr><wbr>设置其它列数据</span></p>
<p><span style="color: rgb(0,0,0)">//新插入的数据在下面</span></p>
<p><span style="color: rgb(0,0,0)">int nIndex = m_list.GetItemCount();<br />LV_ITEM lvItem;<br />lvItem.mask = LVIF_TEXT ; <br />lvItem.iItem = nIndex; //行数<br />lvItem.iSubItem = 0;<br />lvItem.pszText = (char*)(LPCTSTR)strCount; //第一列<br />//在最后一行插入记录值.<br />m_list.InsertItem(&amp;lvItem); <br />//插入其它列<br />m_list.SetItemText(nIndex,1,strLat);</span><span style="color: rgb(0,0,0)"><br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">4. </span><wbr><wbr><wbr><wbr>一直选中<span style="line-height: 1.3em">item</span><wbr><wbr><wbr><wbr><br />选中<span style="line-height: 1.3em">style</span><wbr><wbr><wbr><wbr>中的<span style="line-height: 1.3em">Show selection always</span><wbr><wbr><wbr><wbr>，或者在上面第<span style="line-height: 1.3em">2</span><wbr><wbr><wbr><wbr>点中设置<span style="line-height: 1.3em">LVS_SHOWSELALWAYS</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">5. </span><wbr><wbr><wbr><wbr>选中和取消选中一行 <br /><span style="line-height: 1.3em">int nIndex = 0;</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">//</span><wbr><wbr><wbr><wbr>选中 <br /><span style="line-height: 1.3em">m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">//</span><wbr><wbr><wbr><wbr>取消选中 <br /><span style="line-height: 1.3em">m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">6. </span><wbr><wbr><wbr><wbr>得到<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>中所有行的<span style="line-height: 1.3em">checkbox</span><wbr><wbr><wbr><wbr>的状态<br /><span style="line-height: 1.3em">m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">CString str;</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">for(int i=0; i&lt;m_list.GetItemCount(); i++)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">str.Format(_T("</span><wbr><wbr><wbr><wbr>第<span style="line-height: 1.3em">%d</span><wbr><wbr><wbr><wbr>行的<span style="line-height: 1.3em">checkbox</span><wbr><wbr><wbr><wbr>为选中状态<span style="line-height: 1.3em">"), i);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">AfxMessageBox(str);</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">}</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">}</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">7. </span><wbr><wbr><wbr><wbr>得到<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>中所有选中行的序号<br />方法一： <br /><span style="line-height: 1.3em">CString str;</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">for(int i=0; i&lt;m_list.GetItemCount(); i++)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">str.Format(_T("</span><wbr><wbr><wbr><wbr>选中了第<span style="line-height: 1.3em">%d</span><wbr><wbr><wbr><wbr>行<span style="line-height: 1.3em">"), i);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">AfxMessageBox(str);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">}</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">}</span><wbr><wbr><wbr><wbr> <br />方法二： <br /><span style="line-height: 1.3em">POSITION pos = m_list.GetFirstSelectedItemPosition();</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">if (pos == NULL)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">TRACE0("No items were selected!\n");</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">Else</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">while (pos)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">int nItem = m_list.GetNextSelectedItem(pos);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">TRACE1("Item %d was selected!\n", nItem);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">// you could do your own processing on nItem here</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">}</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">}</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">8. </span><wbr><wbr><wbr><wbr>得到<span style="line-height: 1.3em">item</span><wbr><wbr><wbr><wbr>的信息<br /><span style="line-height: 1.3em">TCHAR szBuf[1024];</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">LVITEM lvi;</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">lvi.iItem = nItemIndex;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">lvi.iSubItem = 0;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">lvi.mask = LVIF_TEXT;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">lvi.pszText = szBuf;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">lvi.cchTextMax = 1024;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">m_list.GetItem(&amp;lvi);</span><wbr><wbr><wbr><wbr><br />关于得到设置<span style="line-height: 1.3em">item</span><wbr><wbr><wbr><wbr>的状态，还可以参考<span style="line-height: 1.3em">msdn</span><wbr><wbr><wbr><wbr>文章<br /><span style="line-height: 1.3em">Q173242: Use Masks to Set/Get Item States in ClistCtrl</span><wbr><wbr><wbr><wbr><br /></span><a href="http://support.microsoft.com/kb/173242/en-us" target="_blank"><span style="line-height: 1.3em; color: rgb(0,0,0)">http://support.microsoft.com/kb/173242/en-us</span><wbr><wbr><wbr><wbr></a><wbr><wbr><wbr><wbr><span style="color: rgb(0,0,0)"><br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">9. </span><wbr><wbr><wbr><wbr>得到<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>的所有列的<span style="line-height: 1.3em">header</span><wbr><wbr><wbr><wbr>字符串内容<br /><span style="line-height: 1.3em">LVCOLUMN lvcol;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">char str[256];</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">int nColNum;</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">CString strColumnName[4];//</span><wbr><wbr><wbr><wbr>假如有<span style="line-height: 1.3em">4</span><wbr><wbr><wbr><wbr>列<br /><span style="line-height: 1.3em">nColNum = 0;</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">lvcol.mask = LVCF_TEXT;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">lvcol.pszText = str;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">lvcol.cchTextMax = 256;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">while(m_list.GetColumn(nColNum, &amp;lvcol))</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{ </span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">strColumnName[nColNum] = lvcol.pszText;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">nColNum++;</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">}</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">10. </span><wbr><wbr><wbr><wbr>使<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>中一项可见，即滚动滚动条<br /><span style="line-height: 1.3em">m_list.EnsureVisible(i, FALSE);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">11. </span><wbr><wbr><wbr><wbr>得到<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>列数<br /><span style="line-height: 1.3em">int nHeadNum = m_list.GetHeaderCtrl()-&gt;GetItemCount();</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">12. </span><wbr><wbr><wbr><wbr>删除所有列 <br />方法一： <br /><span style="line-height: 1.3em">while ( m_list.DeleteColumn (0))</span><wbr><wbr><wbr><wbr><br />因为你删除了第一列后，后面的列会依次向上移动。 <br />方法二： <br /><span style="line-height: 1.3em">int nColumns = 4;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">for (int i=nColumns-1; i&gt;=0; i--)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">m_list.DeleteColumn (i);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">13. </span><wbr><wbr><wbr><wbr>得到单击的<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>的行列号<br />添加<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>控件的<span style="line-height: 1.3em">NM_CLICK</span><wbr><wbr><wbr><wbr>消息相应函数<br /><span style="line-height: 1.3em">void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">// </span><wbr><wbr><wbr><wbr>方法一： <br /><span style="line-height: 1.3em">/*</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">DWORD dwPos = GetMessagePos();</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">CPoint point( LOWORD(dwPos), HIWORD(dwPos) );</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">m_list.ScreenToClient(&amp;point);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">LVHITTESTINFO lvinfo;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">lvinfo.pt = point;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">lvinfo.flags = LVHT_ABOVE;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">int nItem = m_list.SubItemHitTest(&amp;lvinfo);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">if(nItem != -1)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">CString strtemp;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">strtemp.Format("</span><wbr><wbr><wbr><wbr>单击的是第<span style="line-height: 1.3em">%d</span><wbr><wbr><wbr><wbr>行第<span style="line-height: 1.3em">%d</span><wbr><wbr><wbr><wbr>列<span style="line-height: 1.3em">", lvinfo.iItem, lvinfo.iSubItem);</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">AfxMessageBox(strtemp);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">}</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">*/</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">// </span><wbr><wbr><wbr><wbr>方法二<span style="line-height: 1.3em">:</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">/*</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">if(pNMListView-&gt;iItem != -1)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">CString strtemp;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">strtemp.Format("</span><wbr><wbr><wbr><wbr>单击的是第<span style="line-height: 1.3em">%d</span><wbr><wbr><wbr><wbr>行第<span style="line-height: 1.3em">%d</span><wbr><wbr><wbr><wbr>列<span style="line-height: 1.3em">",</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">pNMListView-&gt;iItem, pNMListView-&gt;iSubItem);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">AfxMessageBox(strtemp);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">}</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">*/</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">*pResult = 0;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">}</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">14. </span><wbr><wbr><wbr><wbr>判断是否点击在<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>的<span style="line-height: 1.3em">checkbox</span><wbr><wbr><wbr><wbr>上<br />添加<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>控件的<span style="line-height: 1.3em">NM_CLICK</span><wbr><wbr><wbr><wbr>消息相应函数<br /><span style="line-height: 1.3em">void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) </span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{ </span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">DWORD dwPos = GetMessagePos();</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">CPoint point( LOWORD(dwPos), HIWORD(dwPos) ); </span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">m_list.ScreenToClient(&amp;point);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">LVHITTESTINFO lvinfo;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">lvinfo.pt = point;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">lvinfo.flags = LVHT_ABOVE;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">UINT nFlag;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">int nItem = m_list.HitTest(point, &amp;nFlag);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">//</span><wbr><wbr><wbr><wbr>判断是否点在<span style="line-height: 1.3em">checkbox</span><wbr><wbr><wbr><wbr>上<br /><span style="line-height: 1.3em">if(nFlag == LVHT_ONITEMSTATEICON)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">AfxMessageBox("</span><wbr><wbr><wbr><wbr>点在<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>的<span style="line-height: 1.3em">checkbox</span><wbr><wbr><wbr><wbr>上<span style="line-height: 1.3em">");</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">} </span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">*pResult = 0;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">}</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">15. </span><wbr><wbr><wbr><wbr>右键点击<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>的<span style="line-height: 1.3em">item</span><wbr><wbr><wbr><wbr>弹出菜单<br />添加<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>控件的<span style="line-height: 1.3em">NM_RCLICK</span><wbr><wbr><wbr><wbr>消息相应函数<br /><span style="line-height: 1.3em">void CTest6Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">if(pNMListView-&gt;iItem != -1)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">DWORD dwPos = GetMessagePos();</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">CPoint point( LOWORD(dwPos), HIWORD(dwPos) );</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">CMenu menu;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">VERIFY( menu.LoadMenu( IDR_MENU1 ) );</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">CMenu* popup = menu.GetSubMenu(0);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">ASSERT( popup != NULL ); </span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">popup-&gt;TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">} </span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">*pResult = 0;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">}</span></span></p>
<div>16. item<wbr><wbr><wbr><wbr>切换焦点时<span style="line-height: 1.3em">(</span><wbr><wbr><wbr><wbr>包括用键盘和鼠标切换<span style="line-height: 1.3em">item</span><wbr><wbr><wbr><wbr>时<span style="line-height: 1.3em">)</span><wbr><wbr><wbr><wbr>，状态的一些变化顺序<br />添加<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>控件的<span style="line-height: 1.3em">LVN_ITEMCHANGED</span><wbr><wbr><wbr><wbr>消息相应函数<br /><span style="line-height: 1.3em">void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">// TODO: Add your control notification handler code here</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">CString sTemp;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">if((pNMListView-&gt;uOldState &amp; LVIS_FOCUSED) == LVIS_FOCUSED &amp;&amp; (pNMListView-&gt;uNewState &amp; LVIS_FOCUSED) == 0)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">sTemp.Format("%d losted focus",pNMListView-&gt;iItem);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">}</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">else if((pNMListView-&gt;uOldState &amp; LVIS_FOCUSED) == 0 &amp;&amp;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">(pNMListView-&gt;uNewState &amp; LVIS_FOCUSED) == LVIS_FOCUSED)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">sTemp.Format("%d got focus",pNMListView-&gt;iItem);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">} </span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">if((pNMListView-&gt;uOldState &amp; LVIS_SELECTED) == LVIS_SELECTED &amp;&amp;</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">(pNMListView-&gt;uNewState &amp; LVIS_SELECTED) == 0)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">sTemp.Format("%d losted selected",pNMListView-&gt;iItem);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">}</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">else if((pNMListView-&gt;uOldState &amp; LVIS_SELECTED) == 0 &amp;&amp; (pNMListView-&gt;uNewState &amp; LVIS_SELECTED) == LVIS_SELECTED)</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">{</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">sTemp.Format("%d got selected",pNMListView-&gt;iItem);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">}</span><wbr><wbr><wbr><wbr> <br /><span style="line-height: 1.3em">*pResult = 0; </span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">17. </span><wbr><wbr><wbr><wbr>得到另一个进程里的<span style="line-height: 1.3em">listctrl</span><wbr><wbr><wbr><wbr>控件的<span style="line-height: 1.3em">item</span><wbr><wbr><wbr><wbr>内容<br /><a href="http://www.codeproject.com/threads/int64_memsteal.asp" target="_blank"><span style="line-height: 1.3em; color: rgb(0,0,0)">http://www.codeproject.com/threads/int64_memsteal.asp</span><wbr><wbr><wbr><wbr></a><wbr><wbr><wbr><wbr><span style="color: rgb(0,0,0)"><br /><br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">18. </span><wbr><wbr><wbr><wbr>选中<span style="line-height: 1.3em">listview</span><wbr><wbr><wbr><wbr>中的<span style="line-height: 1.3em">item</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">Q131284: How To Select a Listview Item Programmatically</span><wbr><wbr><wbr><wbr><br /></span><a href="http://support.microsoft.com/kb/131284/en-us" target="_blank"><span style="line-height: 1.3em; color: rgb(0,0,0)">http://support.microsoft.com/kb/131284/en-us</span><wbr><wbr><wbr><wbr></a><wbr><wbr><wbr><wbr><span style="color: rgb(0,0,0)"><br /><br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">19. </span><wbr><wbr><wbr><wbr>如何在<span style="line-height: 1.3em">CListView</span><wbr><wbr><wbr><wbr>中使用<span style="line-height: 1.3em">CListCtrl</span><wbr><wbr><wbr><wbr>的派生类<br /></span><a href="http://www.codeguru.com/cpp/controls/listview/introduction/article.php/c919/" target="_blank"><span style="line-height: 1.3em; color: rgb(0,0,0)">http://www.codeguru.com/cpp/controls/listview/introduction/article.php/c919/</span><wbr><wbr><wbr><wbr></a><wbr><wbr><wbr><wbr><span style="color: rgb(0,0,0)"><br /><br /><span style="line-height: 1.3em">--------------------------------------------------------------------------------</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">20. listctrl</span><wbr><wbr><wbr><wbr>的<span style="line-height: 1.3em">subitem</span><wbr><wbr><wbr><wbr>添加图标<br /><span style="line-height: 1.3em">m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);</span><wbr><wbr><wbr><wbr><br /><span style="line-height: 1.3em">m_list.SetItem(..); //</span><wbr><wbr><wbr><wbr>具体参数请参考<span style="line-height: 1.3em">msdn</span><wbr><wbr><wbr><wbr><br /></span></div>
<p><br />} </p>
<p>str.Format("你双击了:%d行，%d列",pList-&gt;iItem,pList-&gt;iSubItem);<br />MessageBox(str);<br /><br />*pResult = 0;<br />}</p>
<p><br />常用操作：<br />1、添加列标题头：InsertColumn<br />2、获取与设置列宽：GetColumnWidth、SetColumnWidth<br />3、添加一行：InsertItem、SetItemText<br />4、获取与设置单元文本：GetItemText、SetItemText<br />5、允许多行选中时，获取选中的行数：GetSelectedCount<br />6、单行选中时，获取选中的行：GetSelectionMark<br />7、选中某行：SetItemState(n, LVIS_SELECTED, LVIS_SELECTED);取消选中的行SetItemState(n,0,-1);使用此函数前需要先调用SetFocus();<br />8、获取某行的状态是否为选中：GetItemState(n, LVIS_SELECTED) == LVIS_SELECTED<br />9、删除所有行：DeleteAllItems<br />10、删除指定列：DeleteColumn<br />11、删除指定行：DeleteItem<br />12、获取与设置列表控件的背景色：GetBkColor、SetBkColor<br />13、获取与设置文字背景色：GetTextBkColor、SetTextBkColor<br />14、获取与设置文字前景色：GetTextColor、SetTextColor<br />15、获取与设置Check：GetCheck、SetCheck,使用前需要设置控件属性SetExtendedStyle(LVS_EX_CHECKBOXES);使控件有勾选功能<br />16、获取与设置图标列表：GetImageList、SetImageList<br />17、获取与设置行附加数据：GetItemData、SetItemData<br />18、获取与设置扩展风格样式：GetExtendedStyle、SetExtendedStyle<br />19、设置正行选中与网格线：SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);<br />20、让ListCtrl支持编辑的功能：<br />&#9312;、将属性中的 Edit Labels 设置为 True；<br />&#9313;、响应控件的 LVN_EDNLABELEDIT 消息，添加如下代码：<br />CString strText;<br />m_ListCtrl.GetEditControl()-&gt;GetWindowText(strText);<br />m_ListCtrl.SetItemText(pDispInfo-&gt;item.iItem, pDispInfo-&gt;item.iSubItem, strText);</p>
<p>21、多行可选时，跳到第一个被选中的行，即使第一个被选中的行可视。</p>
<p>POSITION pos = pView-&gt;GetListCtrl().GetFirstSelectedItemPosition();<br />int nFirstSel = pView-&gt;GetListCtrl().GetNextSelectedItem(pos);<br />if (nFirstSel != -1)<br />{<br />pView-&gt;GetListCtrl().EnsureVisible(nFirstSel,FALSE);<br />} </p>
<p>&nbsp;</p>
<p>列表中添加图标代码：</p>
<p>UINT nIconID[] = {IDI_ICON1,IDI_ICON2,IDI_ICON3,IDI_ICON4,IDI_ICON5};//图标ID<br />m_ImageList.Create(16,16,ILC_COLOR24,sizeof(nIconID)/sizeof(UINT),0);//初始化CImageList类，sizeof(nIconID)/sizeof(UINT)为图标个数，后面的0表示CImageList在sizeof(nIconID)/sizeof(UINT)个图标个数的基础上可再添加多少个图标。<br />m_ImageList.SetBkColor(RGB(255,255,255));//设置背景色为白色<br />for(int i = 0; i &lt; sizeof(nIconID)/sizeof(UINT); i++)<br />{<br />m_ImageList.Add(AfxGetApp()-&gt;LoadIcon(nIconID[i]));//将图标添加到CImageList<br />}<br />m_ListCtrl.SetImageList(&amp;m_ImageList,LVSIL_SMALL);//设置列表控件显示图标</p>
<p>m_ListCtrl.InsertColumn(0,_T("第1列"),0,100);<br />m_ListCtrl.InsertColumn(1,_T("第2列"),0,100);<br />m_ListCtrl.InsertColumn(2,_T("第3列"),0,100);<br />m_ListCtrl.InsertItem(0,_T("数据1"),0);//后面的0表示添加CImageList中的第0个图标<br />m_ListCtrl.InsertItem(1,_T("数据2"),1);//后面的1表示添加CImageList中的第1个图标<br />m_ListCtrl.InsertItem(2,_T("数据3"),2);<br />m_ListCtrl.SetItemText(0,1,_T("01"));<br />m_ListCtrl.SetExtendedStyle(LVS_EX_CHECKBOXES);//设置控件有勾选功能<br />DWORD dwStyle = m_ListCtrl.GetExtendedStyle();<br />m_ListCtrl.SetExtendedStyle(dwStyle|LVS_EX_FULLROWSELECT);设置控件选中行的功能</p>
<p sizset="0" sizcache03751642967829892="1"><img alt="" src="http://hiphotos.baidu.com/cannotforget/pic/item/422a8101356914bb267fb5e3.jpg" small="0" /></p>
<p>&nbsp;</p>
<p>遍历文件夹并显示文件名与图标：</p>
<p>CFileFind fileFind;<br />CString szDir("D:\\Tools");<br />BOOL bRet = fileFind.FindFile(szDir+"\\*.*");<br />while(bRet)<br />{<br />bRet = fileFind.FindNextFile();<br />if(fileFind.IsDots())<br />continue;<br />if(!fileFind.IsDirectory())<br />{<br />SHFILEINFO shfi;<br />SHGetFileInfo(fileFind.GetFilePath(),FILE_ATTRIBUTE_NORMAL,&amp;shfi,sizeof(shfi),SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME);<br />int nImageID = m_ImageList.Add(shfi.hIcon);<br />m_ListCtrl.InsertItem(m_ListCtrl.GetItemCount(),fileFind.GetFileName(),nImageID);<br />}<br />}</p>
<p sizset="1" sizcache03751642967829892="1"><img alt="" src="http://hiphotos.baidu.com/cannotforget/pic/item/a8b4b4b73a02959930add121.jpg" small="0" /></p>
<p>&nbsp;</p>
<p><strong>复制列表内容<br /></strong></p>
<p>void CXXXView::OnCopydataToClipboard() <br />{<br />int nSelectCount = GetListCtrl().GetSelectedCount();<br />int nSelect = -1;<br />CString strData = _T("");<br />for (int i = 0; i &lt; nSelectCount; i++)<br />{<br />//找到选择的行号<br />nSelect = GetListCtrl().GetNextItem(nSelect,LVNI_ALL | LVNI_SELECTED);<br />//列数<br />int nColumnCount = GetListCtrl().GetHeaderCtrl()-&gt;GetItemCount();<br />for (int j = 0; j &lt; nColumnCount; j++)<br />{<br />CString text;<br />text = GetListCtrl().GetItemText(nSelect,j);<br />if (j != 0)<br />strData += "\t";<br />strData += text;<br />}<br />//用\r\n来控制回车和换行<br />if (i != nSelectCount - 1)<br />strData += "\r\n";<br />}<br /><br />//复制到剪贴板<br />HGLOBAL clipbordBuf = GlobalAlloc(GMEM_DDESHARE,2*(strData.GetLength() + 1));<br />TCHAR *pBuf = (TCHAR*)GlobalLock(clipbordBuf);<br />lstrcpy((LPTSTR)pBuf,(LPCTSTR)strData);<br />GlobalUnlock(clipbordBuf);</p>
<p>OpenClipboard();<br />EmptyClipboard();<br />SetClipboardData(CF_TEXT,pBuf);<br />CloseClipboard();<br />}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>在非第一列中添加图标</strong></p>
<p>m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_SUBITEMIMAGES);</p>
<p>&nbsp;</p>
<p>m_List.SetItem(0,1,LVIF_TEXT|LVIF_IMAGE,&#8220;aaa&#8221;,0,0,0,0);//在第一行第二列加入第1个图标</p>
<p>m_List.SetItem(i,1,LVIF_TEXT|LVIF_IMAGE,szBuffer,i,0,0,0);</p>
<p sizset="2" sizcache03751642967829892="1"><img alt="" src="http://hiphotos.baidu.com/cannotforget/pic/item/921164d0f703918ffeacd275513d269758eec4c3.jpg" small="0" /><br /></p></div><img src ="http://www.cppblog.com/Mumoo/aggbug/199461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Mumoo/" target="_blank">Mumoo</a> 2013-04-15 17:20 <a href="http://www.cppblog.com/Mumoo/archive/2013/04/15/199461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CStringList用法</title><link>http://www.cppblog.com/Mumoo/archive/2013/04/15/199460.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Mon, 15 Apr 2013 08:28:00 GMT</pubDate><guid>http://www.cppblog.com/Mumoo/archive/2013/04/15/199460.html</guid><wfw:comment>http://www.cppblog.com/Mumoo/comments/199460.html</wfw:comment><comments>http://www.cppblog.com/Mumoo/archive/2013/04/15/199460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Mumoo/comments/commentRss/199460.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Mumoo/services/trackbacks/199460.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div class="para">CStringList类成员</div>
<div class="para">构造</div>
<p>
<table class="table-view log-set-param" sizcache0721622997495204="1" sizset="231" log-set-param="table_view">
<tbody sizcache0721622997495204="1" sizset="232">
<tr sizcache0721622997495204="1" sizset="233">
<td width="100" sizcache0721622997495204="1" sizset="234">
<div class="para" sizcache0721622997495204="1" sizset="235"><a href="http://baike.baidu.com/view/2962181.htm" target="_blank">CStringList</a> </div>
<td width="500" align="left" sizcache0721622997495204="1" sizset="237">构造一个空的CString对象列表 
<div></div></td></tr></tbody></table></p>
<div class="para">首/尾访问</div>
<p>
<table class="table-view log-set-param" sizcache0721622997495204="1" sizset="240" log-set-param="table_view">
<tbody sizcache0721622997495204="1" sizset="241">
<tr sizcache0721622997495204="1" sizset="242">
<td width="100" sizcache0721622997495204="1" sizset="243">
<div class="para">GetHead </div>
<td width="500" align="left">返回此列表（不能是空的）中头部的元素 
<tr sizcache0721622997495204="1" sizset="246">
<td width="100">GetTail 
<td width="500" align="left" sizcache0721622997495204="1" sizset="248">返回此列表（不能是空的）中尾部的元素 
<div></div></td></tr></tbody></table></p>
<div class="para">操作</div>
<p>
<table class="table-view log-set-param" sizcache0721622997495204="1" sizset="251" log-set-param="table_view">
<tbody sizcache0721622997495204="1" sizset="252">
<tr sizcache0721622997495204="1" sizset="253">
<td width="100" sizcache0721622997495204="1" sizset="254">
<div class="para">RemoveHead </div>
<td width="500" align="left">从列表的头部删除元素 
<tr sizcache0721622997495204="1" sizset="257">
<td width="100">RemoveTail 
<td width="500" align="left">从列表的尾部删除元素 
<tr sizcache0721622997495204="1" sizset="260">
<td width="100">AddHead 
<td width="500" align="left">在列表的头部添加一个元素（或者是另一个列表中的所有元素），即产生一个新的头部 
<tr sizcache0721622997495204="1" sizset="263">
<td width="100">AddTail 
<td width="500" align="left">在列表的尾部添加一个元素（或者是另一个列表中的所有元素），即产生一个新的尾部 
<tr sizcache0721622997495204="1" sizset="266">
<td width="100" sizcache0721622997495204="1" sizset="267"><a href="http://baike.baidu.com/view/1229958.htm" target="_blank">RemoveAll</a> 
<td width="500" align="left" sizcache0721622997495204="1" sizset="269">删除此列表中的所有元素 
<div></div></td></tr></tbody></table></p>
<div class="para">重复</div>
<p>
<table class="table-view log-set-param" sizcache0721622997495204="1" sizset="272" log-set-param="table_view">
<tbody sizcache0721622997495204="1" sizset="273">
<tr sizcache0721622997495204="1" sizset="274">
<td width="100" sizcache0721622997495204="1" sizset="275">
<div class="para">GetHeadPosition </div>
<td width="500" align="left">返回列表中的头部元素的位置 
<tr sizcache0721622997495204="1" sizset="278">
<td width="100">GetTailPosition 
<td width="500" align="left">返回列表中尾部元素的位置 
<tr sizcache0721622997495204="1" sizset="281">
<td width="100">GetNext 
<td width="500" align="left">获取用于重复的下一个元素 
<tr sizcache0721622997495204="1" sizset="284">
<td width="100">GetPrev 
<td width="500" align="left" sizcache0721622997495204="1" sizset="286">获取用于重复的前一个元素 
<div></div></td></tr></tbody></table></p>
<div class="para">获取/修改</div>
<p>
<table class="table-view log-set-param" sizcache0721622997495204="1" sizset="289" log-set-param="table_view">
<tbody sizcache0721622997495204="1" sizset="290">
<tr sizcache0721622997495204="1" sizset="291">
<td width="100" sizcache0721622997495204="1" sizset="292">
<div class="para" sizcache0721622997495204="1" sizset="293"><a href="http://baike.baidu.com/view/4729285.htm" target="_blank">GetAt</a> </div>
<td width="500" align="left">获取给定位置处的元素 
<tr sizcache0721622997495204="1" sizset="296">
<td width="100">SetAt 
<td width="500" align="left">设置给定位置处的元素 
<tr sizcache0721622997495204="1" sizset="299">
<td width="100">RemoveAt 
<td width="500" align="left" sizcache0721622997495204="1" sizset="301">从此列表中删除由位置指定的一个元素 
<div></div></td></tr></tbody></table></p>
<div class="para">插入</div>
<p>
<table class="table-view log-set-param" sizcache0721622997495204="1" sizset="304" log-set-param="table_view">
<tbody sizcache0721622997495204="1" sizset="305">
<tr sizcache0721622997495204="1" sizset="306">
<td width="100" sizcache0721622997495204="1" sizset="307">
<div class="para">InsertBefore </div>
<td width="500" align="left">在一个给定位置之前插入一个新元素 
<tr sizcache0721622997495204="1" sizset="310">
<td width="100">InsertAfter 
<td width="500" align="left" sizcache0721622997495204="1" sizset="312">在一个给定位置之后插入一个新元素 
<div></div></td></tr></tbody></table></p>
<div class="para">搜索</div>
<p>
<table class="table-view log-set-param" sizcache0721622997495204="1" sizset="315" log-set-param="table_view">
<tbody sizcache0721622997495204="1" sizset="316">
<tr sizcache0721622997495204="1" sizset="317">
<td width="100" sizcache0721622997495204="1" sizset="318">
<div class="para" sizcache0721622997495204="1" sizset="319"><a href="http://baike.baidu.com/view/801452.htm" target="_blank">Find</a> </div>
<td width="500" align="left">获取由字符串值指定的元素的位置 
<tr sizcache0721622997495204="1" sizset="322">
<td width="100">FindIndex 
<td width="500" align="left" sizcache0721622997495204="1" sizset="324">获取由一个从零开始的索引指定的元素的位置 
<div></div></td></tr></tbody></table></p>
<div class="para">状态</div>
<p>
<table class="table-view log-set-param" sizcache0721622997495204="1" sizset="327" log-set-param="table_view">
<tbody sizcache0721622997495204="1" sizset="328">
<tr sizcache0721622997495204="1" sizset="329">
<td width="100" sizcache0721622997495204="1" sizset="330">
<div class="para" sizcache0721622997495204="1" sizset="331"><a href="http://baike.baidu.com/view/9588697.htm" target="_blank">GetCount</a> </div>
<td width="500" align="left">返回此列表中的元素个数 
<tr sizcache0721622997495204="1" sizset="334">
<td width="100" sizcache0721622997495204="1" sizset="335"><a href="http://baike.baidu.com/view/1229891.htm" target="_blank">IsEmpty</a> 
<td width="500" align="left" sizcache0721622997495204="1" sizset="337">测试列表是否为空（没有元素）</td></tr></tbody></table><br />CStringList是CString链表，在MFC编程中STL之外的另一选择，用起来更加简洁.</p>
<p>插入数据：AddTail（）;AddHead()</p>
<p>删除数据：RemoveAll();RemoveAt();RemoveHead();RemoveTail()</p>
<p>取得元素个数：GetCount()</p>
<p>取得某个元素值：GetAt(cstringList.FindIndex(index))//index为整数</p>
<p>取得头尾元素：GetHead() ；GetTail(),</p>
<p>遍历最好用上面的方式，不要用POSITION变量，用FindIndex可以了。</p>
<p>初始化：</p>
<p>&nbsp;</p>
<p>CStringList listFileName;<br />listFileName.RemoveAll();</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>添加操作：</p>
<p>&nbsp;</p>
<p>listFileName.AddTail(szFullPathName);</p>
<p>&nbsp;</p>
<p>遍历操作：</p>
<p>&nbsp;</p>
<p>POSITION rPos;<br />rPos = listFileName.GetHeadPosition();<br />while (rPos != NULL)<br />{<br />strFileName = listFileName.GetNext(rPos);<br />strLog += "/r/n" + strFileName;<br />}</p><img src ="http://www.cppblog.com/Mumoo/aggbug/199460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Mumoo/" target="_blank">Mumoo</a> 2013-04-15 16:28 <a href="http://www.cppblog.com/Mumoo/archive/2013/04/15/199460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MessageBox提示语</title><link>http://www.cppblog.com/Mumoo/archive/2013/04/12/199374.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Fri, 12 Apr 2013 06:51:00 GMT</pubDate><guid>http://www.cppblog.com/Mumoo/archive/2013/04/12/199374.html</guid><wfw:comment>http://www.cppblog.com/Mumoo/comments/199374.html</wfw:comment><comments>http://www.cppblog.com/Mumoo/archive/2013/04/12/199374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Mumoo/comments/commentRss/199374.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Mumoo/services/trackbacks/199374.html</trackback:ping><description><![CDATA[<p>MessageBox(NULL, "警示框", "提示框", \<br />&nbsp;&nbsp;MB_OK|MB_ICONWARNING|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p>
<p>&nbsp;MessageBox(NULL, "信息提示框", "提示框", \<br />&nbsp;&nbsp;MB_OK|MB_ICONASTERISK|MB_SYSTEMMODAL|MB_SETFOREGROUND);<br />&nbsp;MessageBox(NULL, "信息框", "提示框", \<br />&nbsp;&nbsp;MB_OK|MB_ICONINFORMATION|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p>
<p>&nbsp;MessageBox(NULL, "错误框", "提示框", \<br />&nbsp;&nbsp;MB_OK|MB_ICONERROR|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p>
<p>&nbsp;MessageBox(NULL, "句柄框", "提示框", \<br />&nbsp;&nbsp;MB_OK|MB_ICONHAND|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p>
<p>&nbsp;MessageBox(NULL, "提问框", "提示框", \<br />&nbsp;&nbsp;MB_OKCANCEL|MB_ICONQUESTION|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p>
<p>&nbsp;MessageBox(NULL, "停止框", "提示框", \<br />&nbsp;&nbsp;MB_OK|MB_ICONSTOP|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p>
<p>&nbsp;MessageBox(NULL, "添加帮助框", "提示框", \<br />&nbsp;&nbsp;MB_HELP|MB_ICONWARNING|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p>
<p>&nbsp;MessageBox(NULL, "YESNO Cancel，添加默认选项", "提示框", \<br />&nbsp;&nbsp;MB_YESNOCANCEL|MB_ICONWARNING|MB_DEFBUTTON1|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p>
<p>&nbsp;MessageBox(NULL, "RETRYCANCEL", "提示框", \<br />&nbsp;&nbsp;MB_RETRYCANCEL|MB_ICONWARNING|MB_DEFBUTTON2|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p>
<p>&nbsp;MessageBox(NULL, "CANCELTRYCONTINUE", "提示框", \<br />&nbsp;&nbsp;MB_CANCELTRYCONTINUE|MB_ICONWARNING|MB_DEFBUTTON3|MB_SYSTEMMODAL|MB_SETFOREGROUND);</p><img src ="http://www.cppblog.com/Mumoo/aggbug/199374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Mumoo/" target="_blank">Mumoo</a> 2013-04-12 14:51 <a href="http://www.cppblog.com/Mumoo/archive/2013/04/12/199374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JS入门资料篇</title><link>http://www.cppblog.com/Mumoo/archive/2013/04/11/199346.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Thu, 11 Apr 2013 02:02:00 GMT</pubDate><guid>http://www.cppblog.com/Mumoo/archive/2013/04/11/199346.html</guid><wfw:comment>http://www.cppblog.com/Mumoo/comments/199346.html</wfw:comment><comments>http://www.cppblog.com/Mumoo/archive/2013/04/11/199346.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Mumoo/comments/commentRss/199346.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Mumoo/services/trackbacks/199346.html</trackback:ping><description><![CDATA[<div>JS简介： 
<div dir="ltr" id="imcontent"><span style="font-family: 'Segoe UI'; direction: ltr; word-wrap: break-word; color: #000000; font-size: 10pt" dir="ltr"><a title="http://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html" href="http://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html">http://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html</a><br />
<div dir="ltr" id="imcontent"><span style="font-family: 'Segoe UI'; direction: ltr; word-wrap: break-word; color: #000000; font-size: 10pt" dir="ltr"><a title="http://www.ruanyifeng.com/blog/2011/06/10_design_defects_in_javascript.html" href="http://www.ruanyifeng.com/blog/2011/06/10_design_defects_in_javascript.html">http://www.ruanyifeng.com/blog/2011/06/10_design_defects_in_javascript.html</a><br /><br />JS异步通信：<br />
<div dir="ltr" id="imcontent"><span style="font-family: 'Segoe UI'; direction: ltr; word-wrap: break-word; color: #000000; font-size: 10pt" dir="ltr"><a title="http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html" href="http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html">http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html</a><br /><br />JS学习：<br />
<div dir="ltr" id="imcontent"><span style="font-family: 'Segoe UI'; direction: ltr; word-wrap: break-word; color: #000000; font-size: 10pt" dir="ltr"><a title="http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html" href="http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html">http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html</a><br /><br />Node JS 学习：<br /><a href="http://www.cnblogs.com/seanlv/archive/2011/11/22/2258716.html">http://www.cnblogs.com/seanlv/archive/2011/11/22/2258716.html</a><br /><a href="http://nodejs.lofter.com/post/3c14e_48aee">http://nodejs.lofter.com/post/3c14e_48aee</a><br /><br />
<p><span style="color: black; font-size: 10pt">切记：函数是一等公民</span>&nbsp;<span style="color: black; font-size: 10pt">是一种数据类型可以作为参数传递</span>&nbsp;<span style="color: black; font-size: 10pt">就基本可以玩转了</span><span style="font-family: 'Segoe UI','sans-serif'; color: black; font-size: 10pt"></span></p></span></div></span></div></span></div></span></div></div><img src ="http://www.cppblog.com/Mumoo/aggbug/199346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Mumoo/" target="_blank">Mumoo</a> 2013-04-11 10:02 <a href="http://www.cppblog.com/Mumoo/archive/2013/04/11/199346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC Listcontrol 使用方法</title><link>http://www.cppblog.com/Mumoo/archive/2013/01/17/197332.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Thu, 17 Jan 2013 02:32:00 GMT</pubDate><guid>http://www.cppblog.com/Mumoo/archive/2013/01/17/197332.html</guid><wfw:comment>http://www.cppblog.com/Mumoo/comments/197332.html</wfw:comment><comments>http://www.cppblog.com/Mumoo/archive/2013/01/17/197332.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Mumoo/comments/commentRss/197332.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Mumoo/services/trackbacks/197332.html</trackback:ping><description><![CDATA[<div><span style="color: red">原文出处：</span><a href="http://blog.csdn.net/bqw2008/article/details/2047489"><span style="color: red">http://blog.csdn.net/bqw2008/article/details/2047489</span></a><br /><span class="ico ico_type_Original"></span>&nbsp;Windows ListCtrl使用技巧<br />1. ListCtrl 风格 <br />LVS_ICON: 为每个item显示大图标<br />LVS_SMALLICON: 为每个item显示小图标<br />LVS_LIST: 显示一列带有小图标的item<br />LVS_REPORT: 显示item详细资料
<div id="article_content" class="article_content">
<div class="postText">
<p>直观的理解：windows资源管理器，&#8220;查看&#8221;标签下的&#8220;大图标，小图标，列表，详细资料&#8221;<br />--------------------------------------------------------------------------------<br />2. 设置listctrl 风格及扩展风格 LONG lStyle;<br />lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口style<br />lStyle &amp;= ~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_<font style="background-color: yellow" color="red">CHECKBOXES</font>;//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"><font color="#000080">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrflistviewstyles.asp</font></a><br />--------------------------------------------------------------------------------<br />3. 插入数据 m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入列<br />m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );<br />int nRow = m_list.InsertItem(0, &#8220;11&#8221;);//插入行<br />m_list.SetItemText(nRow, 1, &#8220;jacky&#8221;);//设置数据<br />--------------------------------------------------------------------------------<br />4. 一直选中item 选中style中的Show selection always，或者在上面第2点中设置LVS_SHOWSELALWAYS</p>
<p>--------------------------------------------------------------------------------<br />5. 选中和取消选中一行 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 />--------------------------------------------------------------------------------<br />6. 得到listctrl中所有行的checkbox的状态 m_list.SetExtendedStyle(LVS_EX_<font style="background-color: yellow" color="red">CHECKBOXES</font>);<br />CString str;<br />for(int i=0; i&lt;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 />--------------------------------------------------------------------------------<br />7. 得到listctrl中所有选中行的序号<br />方法一：<br />CString str;<br />for(int i=0; i&lt;m_list.GetItemCount(); i++)<br />{<br />if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )<br />{<br />str.Format(_T("选中了第%d行"), i);<br />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 />--------------------------------------------------------------------------------<br />8. 得到item的信息 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(&amp;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"><font color="#000080">http://support.microsoft.com/kb/173242/en-us</font></a><br />--------------------------------------------------------------------------------<br />9. 得到listctrl的所有列的header字符串内容 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, &amp;lvcol))<br />{ <br />strColumnName[nColNum] = lvcol.pszText;<br />nColNum++;<br />}<br />--------------------------------------------------------------------------------<br />10. 使listctrl中一项可见，即滚动滚动条 m_list.EnsureVisible(i, FALSE);<br />--------------------------------------------------------------------------------<br />11. 得到listctrl列数 int nHeadNum = m_list.GetHeaderCtrl()-&gt;GetItemCount();<br />--------------------------------------------------------------------------------<br />12. 删除所有列 方法一：<br />while ( m_list.DeleteColumn (0))<br />因为你删除了第一列后，后面的列会依次向上移动。</p>
<p>方法二：<br />int nColumns = 4;<br />for (int i=nColumns-1; i&gt;=0; i--)<br />m_list.DeleteColumn (i);<br />--------------------------------------------------------------------------------<br />13. 得到单击的listctrl的行列号 添加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(&amp;point);<br /><br />LVHITTESTINFO lvinfo;<br />lvinfo.pt = point;<br />lvinfo.flags = LVHT_ABOVE;<br /><br />int nItem = m_list.SubItemHitTest(&amp;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-&gt;iItem != -1)<br />{<br />CString strtemp;<br />strtemp.Format("单击的是第%d行第%d列",<br />pNMListView-&gt;iItem, pNMListView-&gt;iSubItem);<br />AfxMessageBox(strtemp);<br />}<br />*/<br />*pResult = 0;<br />}<br />--------------------------------------------------------------------------------<br />14. 判断是否点击在listctrl的checkbox上 添加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(&amp;point);<br /><br />LVHITTESTINFO lvinfo;<br />lvinfo.pt = point;<br />lvinfo.flags = LVHT_ABOVE;<br /><br />UINT nFlag;<br />int nItem = m_list.HitTest(point, &amp;nFlag);<br />//判断是否点在checkbox上<br />if(nFlag == LVHT_ONITEMSTATEICON)<br />{<br />AfxMessageBox("点在listctrl的checkbox上");<br />} <br />*pResult = 0;<br />}<br />--------------------------------------------------------------------------------<br />15. 右键点击listctrl的item弹出菜单 添加listctrl控件的NM_RCLICK消息相应函数<br />void CTest6Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)<br />{<br />NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;<br />if(pNMListView-&gt;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-&gt;TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );<br />} <br />*pResult = 0;<br />}<br />--------------------------------------------------------------------------------<br />16. item切换焦点时(包括用键盘和鼠标切换item时)，状态的一些变化顺序 添加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-&gt;uOldState &amp; LVIS_FOCUSED) == LVIS_FOCUSED &amp;&amp; <br />(pNMListView-&gt;uNewState &amp; LVIS_FOCUSED) == 0)<br />{<br />sTemp.Format("%d losted focus",pNMListView-&gt;iItem);<br />}<br />else if((pNMListView-&gt;uOldState &amp; LVIS_FOCUSED) == 0 &amp;&amp;<br />(pNMListView-&gt;uNewState &amp; LVIS_FOCUSED) == LVIS_FOCUSED)<br />{<br />sTemp.Format("%d got focus",pNMListView-&gt;iItem);<br />} <br /><br />if((pNMListView-&gt;uOldState &amp; LVIS_SELECTED) == LVIS_SELECTED &amp;&amp;<br />(pNMListView-&gt;uNewState &amp; LVIS_SELECTED) == 0)<br />{<br />sTemp.Format("%d losted selected",pNMListView-&gt;iItem);<br />}<br />else if((pNMListView-&gt;uOldState &amp; LVIS_SELECTED) == 0 &amp;&amp;<br />(pNMListView-&gt;uNewState &amp; LVIS_SELECTED) == LVIS_SELECTED)<br />{<br />sTemp.Format("%d got selected",pNMListView-&gt;iItem);<br />}<br /><br />*pResult = 0;<br />}<br />--------------------------------------------------------------------------------<br />20. listctrl的subitem添加图标 m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);<br />m_userlist.SetItem(..); //具体参数请参考msdn<br />--------------------------------------------------------------------------------<br />21. 在CListCtrl显示文件，并根据文件类型来显示图标 网上找到的代码，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 />CString 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:///"><font color="#000080">file:///</font></a>));<br /><br />himlSmall = (HIMAGELIST)SHGetFileInfo ((LPCSTR)cSysDir, <br />0, <br />&amp;sfi, <br />sizeof(SHFILEINFO), <br />SHGFI_SYSICONINDEX | SHGFI_SMALLICON );<br /><br />himlLarge = (HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir, <br />0, <br />&amp;sfi, <br />sizeof(SHFILEINFO), <br />SHGFI_SYSICONINDEX | SHGFI_LARGEICON);<br /><br />if (himlSmall &amp;&amp; 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(&amp;sfi, 0, sizeof(sfi));<br /><br />if (bIsDir)<br />{<br />SHGetFileInfo(lpszPath, <br />FILE_ATTRIBUTE_DIRECTORY, <br />&amp;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 />&amp;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 />}</p>
<p>--------------------------------------------------------------------------------<br />22. listctrl内容进行大数据量更新时，避免闪烁 m_list.SetRedraw(FALSE);<br />//更新内容<br />m_list.SetRedraw(TRUE);<br />m_list.Invalidate();<br />m_list.UpdateWindow();</p>
<p>///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</p>
<p><font color="#3366ff" size="3">创建图形列表并和CListCtrl关联：<br />m_image_list.Create(IDB_CALLER2, 16, 10, RGB(192,192, 192));<br />m_image_list.SetBkColor( GetSysColor( COLOR_WINDOW ) );<br />m_caller_list.SetImageList( &amp;m_image_list, LVSIL_SMALL);<br />为报表添加4列：<br />char *szColumn[]={"昵称","IP地址","登陆时间","状态"};<br />int widths[]={100,98,70,55};<br />LV_COLUMN lvc;<br />lvc.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;<br />lvc.fmt=LVCFMT_LEFT;<br />for(int i=0;i&lt;4;i++) {//插入各列<br />lvc.pszText=szColumn[i];<br />lvc.cx=widths[i];<br />lvc.iSubItem=i;<br />m_caller_list.InsertColumn(i,&amp;lvc);<br />}<br />为报表添加两项，以附加方式添加：<br />char* data[4];<br />data[0]="所有人";<br />data[1]="0.0.0.0";<br />data[3]="在线";<br />data[2]=new char;<br />CTime now=CTime::GetCurrentTime();<br />CString temp = now.Format("%H:%M:%S");<br />data[2]=temp.GetBuffer(1);<br />LV_ITEM lvi;<br />lvi.mask=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;<br />lvi.iSubItem=0;<br />lvi.pszText=(char *)data[0];<br />lvi.iImage = 0;<br />lvi.iItem=0;<br />m_caller_list.InsertItem(&amp;lvi);<br />for (int j=0;j&lt;4;j++) m_caller_list.SetItemText(count,j,data[j]);<br />count++;<br />lvi.iImage = 1;<br />lvi.iItem=count;<br />m_caller_list.InsertItem(&amp;lvi);<br />data[0]="cherami";<br />data[1]="127.0.0.1"; <br />for (int n=0;n&lt;4;n++) m_caller_list.SetItemText(count,n,data[n]);<br />count++;<br />设置报表的样式<br />选中一整行：<br />m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_FULLROWSELECT); <br />绘制表格：<br />m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_GRIDLINES); <br />带复选框：<br />m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_<font style="background-color: yellow" color="red">CHECKBOXES</font>); <br />自动切换：<br />m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_TRACKSELECT); <br />选定一行：<br />设置CListCtrl的Show selection always选项<br />SetItemState (iIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED) <br />选中一个或多个项目时,会发送LVN_ITEMCHANGED消息，可以使用<br />GetSelectedCount()方法得到被选定的项的数目。<br />点击列头的消息响应：<br />ON_NOTIFY(HDN_ITEMCLICKW, 0, ResponseFunc)<br />消息，需要自己添加 <br />或者：<br />ON_NOTIFY(LVN_COLUMNCLICK, ID_yourCtrl, ResponseFunc)//向导添加<br />前者后响应，后者先响应<br />响应函数：<br />ResponseFunc(NMHDR *pNMHDR, LRESULT *pResult) <br />双击CListCtrl中的ITEM的消息是及消息函数：<br />ON_NOTIFY(NM_DBLCLK, ID_yourCtrl, ResponseFunc) <br />单击ITEM的消息响应：<br />ON_NOTIFY(NM_CLICK, ID_yourCtrl, ResponseFunc)<br />ResponseFunc(NMHDR *pNMHDR, LRESULT *pResult) </font></p>
<p><font color="#3366ff" size="3">HDN_ITEMCLICK 就是Header control Notify message for mouse left click on the Header control!<br />而HDN_ITEMCLICK是当List View中存在一个Header Contrl时，Header Ctrl通知父窗口List View的！<br />CListCtrl中的Item被选中触发LBN_SELCHANGE(通过WM_COMMAND)消息！<br />删除CListCtrl中选定的项：<br />POSITION pos;<br />int nIndex;<br />for(; pos= GetFirstSelectedItemPosition();)<br />{<br />nIndex = GetNextSelectedItem(pos);<br />DeleteItem(nIndex);<br />}<br />在ListCtrl中进行排序<br />列表控件（CListCtrl）的顶部有一排按钮，用户可以通过选择不同的列来对记录进行排序。但是 CListCtrl并没有自动排序的功能，我们需要自己添加一个用于排序的回调函数来比较两个数据的大小，此外还需要响应排序按钮被点击的消息。下面讲述一下具体的做法。<br />CListCtrl提供了用于排序的函数，函数原型为：BOOL CListCtrl::SortItems( PFNLVCOMPARE pfnCompare, DWORD dwData )。其中第一个参数为全局排序函数的地址，第二个参数为用户数据，你可以根据你的需要传递一个数据或是指针。该函数返回-1代表第一项排应在第二项前面，返回1代表第一项排应在第二项后面，返回0代表两项相等。<br />用于排序的函数原形为：int CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)，其中第三个参数为调用者传递的数据（即调用SortItems时的第二个参数dwData）。第一和第二个参数为用于比较的两项的ItemData，你可以通过DWORD CListCtrl::GetItemData( int nItem )/BOOL CListCtrl::SetItemData( int nItem, DWORD dwData )来对每一项的ItemData进行存取。在添加项时选用特定的CListCtrl::InsertItem也可以设置该值。由于你在排序时只能通过该值来确定项的位置所以你应该比较明确的确定该值的含义。<br />最后一点，我们需要知道什么时候需要排序，实现这点可以在父窗口中对LVN_COLUMNCLICK消息进行处理来实现。 <br />下面我们看一个例子，这个例子是一个派生类，并支持顺序/倒序两种方式排序。为了简单我对全局数据进行排序，而在实际应用中会有多组需要排序的数据，所以需要通过传递参数的方式来告诉派序函数需要对什么数据进行排序。</font></p>
<p><font color="#3366ff" size="3">//全局数据<br />struct DEMO_DATA<br />{<br />char szName[20];<br />int iAge;<br />}strAllData[5]={{"王某",30},{"张某",40},{"武某",32},{"陈某",20},{"李某",36}};<br />//CListCtrl派生类定义<br />class CSortList : public CListCtrl<br />{<br />// Construction<br />public:<br />CSortList();<br />BOOL m_fAsc;//是否顺序排序<br />int m_nSortedCol;//当前排序的列<br />protected:<br />//{{AFX_MSG(CSortList)<br />//}}AFX_MSG<br />...<br />};<br />//父窗口中包含该CListCtrl派生类对象<br />class CSort_in_list_ctrlDlg : public CDialog<br />{<br />// Construction<br />public:<br />CSort_in_list_ctrlDlg(CWnd* pParent = NULL); // standard constructor<br />// Dialog Data<br />//{{AFX_DATA(CSort_in_list_ctrlDlg)<br />enum { IDD = IDD_SORT_IN_LIST_CTRL_DIALOG };<br />CSortList m_listTest;<br />//}}AFX_DATA<br />}<br />//在父窗口中定义LVN_COLUMNCLICK消息映射<br />BEGIN_MESSAGE_MAP(CSort_in_list_ctrlDlg, CDialog)<br />//{{AFX_MSG_MAP(CSort_in_list_ctrlDlg)<br />ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST1, OnColumnclickList1)<br />//}}AFX_MSG_MAP<br />END_MESSAGE_MAP()<br />//初始化数据<br />BOOL CSort_in_list_ctrlDlg::OnInitDialog()<br />{<br />CDialog::OnInitDialog();<br />//初始化ListCtrl中数据列表<br />m_listTest.InsertColumn(0,"姓名");<br />m_listTest.InsertColumn(1,"年龄");<br />m_listTest.SetColumnWidth(0,80);<br />m_listTest.SetColumnWidth(1,80);<br />for(int i=0;i&lt;5;i++)<br />{<br />m_listTest.InsertItem(i,strAllData[i].szName);<br />char szAge[10];<br />sprintf(szAge,"%d",strAllData[i].iAge);<br />m_listTest.SetItemText(i,1,szAge);<br />//设置每项的ItemData为数组中数据的索引<br />//在排序函数中通过该ItemData来确定数据<br />m_listTest.SetItemData(i,i);<br />}<br />return TRUE; // return TRUE unless you set the focus to a control<br />}<br />//处理消息<br />void CSort_in_list_ctrlDlg::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult) <br />{<br />NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;<br />//设置排序方式<br />if( pNMListView-&gt;iSubItem == m_listTest.m_nSortedCol )<br />m_listTest.m_fAsc = !m_listTest.m_fAsc;<br />else<br />{<br />m_listTest.m_fAsc = TRUE;<br />m_listTest.m_nSortedCol = pNMListView-&gt;iSubItem;<br />}<br />//调用排序函数<br />m_listTest.SortItems( ListCompare, (DWORD)&amp;m_listTest ); <br />*pResult = 0;<br />}<br />//排序函数实现<br />int CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)<br />{<br />//通过传递的参数来得到CSortList对象指针，从而得到排序方式<br />CSortList* pV=(CSortList*)lParamSort;<br />//通过ItemData来确定数据<br />DEMO_DATA* pInfo1=strAllData+lParam1;<br />DEMO_DATA* pInfo2=strAllData+lParam2;<br />CString szComp1,szComp2;<br />int iCompRes;<br />switch(pV-&gt;m_nSortedCol)<br />{<br />case(0):<br />//以第一列为根据排序<br />szComp1=pInfo1-&gt;szName;<br />szComp2=pInfo2-&gt;szName;<br />iCompRes=szComp1.Compare(szComp2);<br />break;<br />case(1):<br />//以第二列为根据排序<br />if(pInfo1-&gt;iAge == pInfo2-&gt;iAge)<br />iCompRes = 0;<br />else<br />iCompRes=(pInfo1-&gt;iAge &lt; pInfo2-&gt;iAge)?-1:1;<br />break;<br />default:<br />ASSERT(0);<br />break;<br />}<br />//根据当前的排序方式进行调整<br />if(pV-&gt;m_fAsc)<br />return iCompRes;<br />else<br />return iCompRes*-1;<br />}<br />排序最快：<br />CListCtrl::SortItems<br />Example<br />// Sort the item in reverse alphabetical order.<br />static int CALLBACK <br />MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)<br />{<br />// lParamSort contains a pointer to the list view control.<br />// The lParam of an item is just its index.<br />CListCtrl* pListCtrl = (CListCtrl*) lParamSort;<br />CString strItem1 = pListCtrl-&gt;GetItemText(lParam1, 0);<br />CString strItem2 = pListCtrl-&gt;GetItemText(lParam2, 0);<br />return strcmp(strItem2, strItem1);<br />}<br />void snip_CListCtrl_SortItems()<br />{<br />// The pointer to my list view control.<br />extern CListCtrl* pmyListCtrl;<br />// Sort the list view items using my callback procedure.<br />pmyListCtrl-&gt;SortItems(MyCompareProc, (LPARAM) pmyListCtrl);<br />}</font></p>
<p><font color="#3366ff" size="3">If you don&#8217;t want to allow the users to sort the list by clicking on the header, you can use the style LVS_NOSORTHEADER. However, if you do want to allow sorting, you do not specify the LVS_NOSORTHEADER. The control, though, does not sort the items. You have to handle the HDN_ITEMCLICK notification from the header control and process it appropriately. In the code below, we have used the sorting function SortTextItems() developed in a previous section. You may choose to sort the items in a different manner. <br />Step 1: Add two member variables<br />Add two member variables to the CListCtrl. The first variable to track which column has been sorted on, if any. The second variable to track if the sort is ascending or descending. <br />int nSortedCol; <br />BOOL bSortAscending; <br /><br />Step 2: Initialize them in the constructor.<br />Initialize nSortedCol to -1 to indicate that no column has been sorted on. If the list is initially sorted, then this variable should reflect that. <br /><br />nSortedCol = -1; <br />bSortAscending = TRUE; <br /><br />Step 3: Add entry in message map to handle HDN_ITEMCLICK<br />Actually you need to add two entries. For HDN_ITEMCLICKA and HDN_ITEMCLICKW. Do not use the class wizard to add the entry. For one, you need to add two entries whereas the class wizard will allow you only one. Secondly, the class wizard uses the wrong macro in the entry. It uses ON_NOTIFY_REFLECT() instead of ON_NOTIFY(). Since the HDN_ITEMCLICK is a notification from the header control to the list view control, it is a direct notification and not a reflected one. <br />ON_NOTIFY(HDN_ITEMCLICKA, 0, OnHeaderClicked) <br />ON_NOTIFY(HDN_ITEMCLICKW, 0, OnHeaderClicked)<br />Note that we specify the same function for both the notification. Actually the program will receive one or the other and not both. What notification it receives will depend on the OS. The list view control on Windows 95 will send the ANSI version and the control on NT will send the UNICODE version. <br />Also, note that the second argument is zero. This value filters for the id of the control and we know that header control id is zero. <br />Step 4: Write the OnHeaderClicked() function<br />Here&#8217;s where you decide what to do when the user clicks on a column header. The expected behaviour is to sort the list based on the values of the items in that column. In this function we have used the SortTextItems() function developed in a previous section. If any of the columns displays numeric or date values, then you would have to provide custom sorting for them. <br /><br />void CMyListCtrl::OnHeaderClicked(NMHDR* pNMHDR, LRESULT* pResult) <br />{<br />HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;<br />if( phdn-&gt;iButton == 0 )<br />{<br />// User clicked on header using left mouse button<br />if( phdn-&gt;iItem == nSortedCol )<br />bSortAscending = !bSortAscending;<br />else<br />bSortAscending = TRUE;<br />nSortedCol = phdn-&gt;iItem;<br />SortTextItems( nSortedCol, bSortAscending );<br />}<br />*pResult = 0;<br />}<br />让CListCtrl的SubItem也具有编辑功能:<br />要重载一个文本框，然后在LVN_BEGINLABELEDIT时改变文本框位置。<br />CInEdit m_InEdit;<br />if( ( GetStyle() &amp; LVS_TYPEMASK ) == LVS_REPORT &amp;&amp; ( m_nEditSubItem != 0 ) )<br />{<br />HWND hwndEdit;<br />CRect rtBound;<br />CString strText;<br />hwndEdit = (HWND)SendMessage( LVM_GETEDITCONTROL );<br />GetSubItemRect( pDispInfo-&gt;item.iItem, m_nEditSubItem, LVIR_LABEL, rtBound );<br />m_InEdit.SubclassWindow( hwndEdit );<br />m_InEdit.m_left = rtBound.left;<br />strText = GetItemText( pDispInfo-&gt;item.iItem, m_nEditSubItem );<br />m_InEdit.SetWindowText( strText );<br />}<br />void CInEdit::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos) <br />{<br />CRect rtClient;<br />lpwndpos-&gt;x = m_left; // m_left在LVN_BEGINLABELEDIT中设置<br />CEdit::OnWindowPosChanging(lpwndpos);<br /><br />// TODO: Add your message handler code here<br /><br />} </font></p></div></div></div><img src ="http://www.cppblog.com/Mumoo/aggbug/197332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Mumoo/" target="_blank">Mumoo</a> 2013-01-17 10:32 <a href="http://www.cppblog.com/Mumoo/archive/2013/01/17/197332.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CTime()类</title><link>http://www.cppblog.com/Mumoo/archive/2012/11/27/195738.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Tue, 27 Nov 2012 08:20:00 GMT</pubDate><guid>http://www.cppblog.com/Mumoo/archive/2012/11/27/195738.html</guid><wfw:comment>http://www.cppblog.com/Mumoo/comments/195738.html</wfw:comment><comments>http://www.cppblog.com/Mumoo/archive/2012/11/27/195738.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Mumoo/comments/commentRss/195738.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Mumoo/services/trackbacks/195738.html</trackback:ping><description><![CDATA[<div>结构:<br />CTime( 
<div class="spctrl"></div>　　int nYear, 
<div class="spctrl"></div>　　int nMonth, 
<div class="spctrl"></div>　　int nDay, 
<div class="spctrl"></div>　　int nHour, 
<div class="spctrl"></div>　　int nMin, 
<div class="spctrl"></div>　　int nSec, 
<div class="spctrl"></div>　　int nDST = -1<br />&nbsp;//参数nDST指定是否实行夏令时，为0时表示实行标准时间，为正数时表示实行夏令时，为负数时由系统自动计算实行的是标准时间还是夏令时。 
<div class="spctrl"></div>　　); <br /><br /><span style="color: #0000ff">　===================================================================== </span>
<div class="spctrl"></div><span style="color: #0000ff">　　</span><strong style="color: #0000ff">C++中，CTime 与 CString转换</strong><span style="color: #0000ff"> </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　CTime m_StartTime1 = CTime::GetCurrentTime(); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　CString csStartTime = m_StartTime1.Format( "%Y%m%d%H%M%S" ); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　</span><strong style="color: #0000ff">一.将CString转为CTime的几种方法</strong><span style="color: #0000ff"> </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　CString timestr = "2000年04月05日"; </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　int a,b,c ; </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　sscanf(timestr.GetBuffer(timestr.GetLength()),"%d年%d月%d日",&amp;a,&amp;b,&amp;c); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　CTime time(a,b,c,0,0,0); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　--------or - --------------------- </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　CString s("2001-8-29 19:06:23"); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　int nYear, nMonth, nDate, nHour, nMin, nSec; </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　sscanf(s, "%d-%d-%d %d:%d:%d", &amp;nYear, &amp;nMonth, &amp;nDate, &amp;nHour, &amp;nMin, &amp;nSec); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　CTime t(nYear, nMonth, nDate, nHour, nMin, nSec); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　---- or ------------------------ </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　CString timestr = "2000年04月05日"; </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　int year,month,day; </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　BYTE tt[5]; </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　//get year </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　memset(tt, 0, sizeof(tt)); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　tt[0] = timestr[0]; </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　tt[1] = timestr[1]; </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　tt[2] = timestr[2]; </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　tt[3] = timestr[3]; </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　year= atoi((char *)tt); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　//get month </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　memset(tt, 0, sizeof(tt)); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　tt[0] = timestr[6]; </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　tt[1] = timestr[7]; </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　month = atoi((char *)tt); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　//get day </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　memset(tt, 0, sizeof(tt)); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　tt[0] = timestr[10]; </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　tt[1] = timestr[11]; </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　CTime time(year,month,day,0,0,0); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　从上面来看,很明显使用sscanf()函数的优势. </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　</span><strong style="color: #0000ff">二.将CTime转换为CString的方法:</strong><span style="color: #0000ff"> </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　CTime tmSCan = CTime::GetCurrentTime(); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　CString szTime = tmScan.Format("'%Y-%m-%d %H:%M:%S'"); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　这样得到的</span><a style="color: #0000ff" href="http://baike.baidu.com/view/566414.htm" target="_blank">日期</a><span style="color: #0000ff">时间字符串就是以"2006-11-27 23:30:59"的格式.</span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　//取得CTime中的日期 </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　CString cstrDate = tmScan.Format("%Y-%m-%d"); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　//取得CTime中的时间 </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　CString cstrTime = tmScan.Format("%H:%M-%S"); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　sprintf还有个不错的表妹：strftime，专门用于格式化时间字符串的，用法跟她表哥很像，也是一大堆格式控制符，只是毕竟小姑娘家心细，她还要调用者指定缓冲区的最大长度，可能是为了在出现问题时可以推卸责任吧。这里举个例子： </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　更多更好的sprintf()函数说明参考:《spirntf，你知道多少？》 </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　time_t t = time(0); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　//产生"YYYY-MM-DD hh:mm:ss"格式的字符串。 </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　char s[32]; </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&amp;t)); </span>
<div style="color: #0000ff" class="spctrl"></div><span style="color: #0000ff">　　sprintf在MFC中也能找到他的知音：CString::Format，strftime在MFC中自然也有她的同道：CTime::Format，这一对由于从</span><a style="color: #0000ff" href="http://baike.baidu.com/view/125370.htm" target="_blank">面向对象</a><span style="color: #0000ff">哪里得到了赞助，用以写出的代码更觉优雅 </span><br /><span style="color: #0000ff">===================================================================== </span><br /><br />获取时间及时间参数方法：<br /><span style="color: red">static CTime WINAPI GetCurrentTime( ); </span>
<div class="spctrl"></div><span style="color: red">　　获取系统当前日期和时间。返回表示当前日期和时间的CTime对象。&nbsp;<br />CString Format(LPCTSTR pszFormat) const; 
<div class="spctrl"></div>　　将CTime对象中的时间信息格式化为字符串。参数pszFormat是格式化字符串，与printf中的格式化字符串类似，格式化字符串中带有%前缀的格式码将会被相应的CTime时间分量代替，而其他字符会原封不动的拷贝到返回字符串中。格式码及含义如下： 
<div class="spctrl"></div>　　%a：周的英文缩写形式。 
<div class="spctrl"></div>　　%A：周的英文全名形式。 
<div class="spctrl"></div>　　%b： 月的英文缩写形式。 
<div class="spctrl"></div>　　%B：月的英文全名形式。 
<div class="spctrl"></div>　　%c： 完整的日期和时间。 
<div class="spctrl"></div>　　%d：十进制形式的日期（01-31）。 
<div class="spctrl"></div>　　%H：24小时制的小时（00-23）。 
<div class="spctrl"></div>　　%I： 12小时制的小时（00-11）。 
<div class="spctrl"></div>　　%j： 十进制表示的一年中的第几天（001-366）。 
<div class="spctrl"></div>　　%m： 月的十进制表示（01-12）。 
<div class="spctrl"></div>　　%M：十进制表示的分钟（00-59）。 
<div class="spctrl"></div>　　%p： 12小时制的上下午标示（AM/PM）。 
<div class="spctrl"></div>　　%S： 十进制表示的秒（00-59）。 
<div class="spctrl"></div>　　%U： 一年中的第几个星期（00-51），星期日是一周的第一天。 
<div class="spctrl"></div>　　%W： 一年中的第几个星期（00-51），星期一是一周的第一天。 
<div class="spctrl"></div>　　%w： 十进制表示的星期几（0-6）。 
<div class="spctrl"></div>　　%Y： 十进制表示的年。 </span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CTime(const SYSTEMTIME&amp; st,int nDST = - 1) ; 
<div class="spctrl"></div>　　以一个SYSTEMTIME结构体变量来构造CTime对象。SYSTEMTIME结构体也是我们对日期时间的常用表示方式。参数st为以本地时间表示的SYSTEMTIME对象，参数nDST同上。 
<div class="spctrl"></div>　　int GetYear( ) const； 
<div class="spctrl"></div>　　获取CTime对象表示时间的年份。范围从1970年1月1日到2038年（包括2038年）1月18日。 
<div class="spctrl"></div>　　int GetMonth( ) const; 
<div class="spctrl"></div>　　获取CTime对象表示时间的月份。范围为1到12。 
<div class="spctrl"></div>　　int GetDay( ) const; 
<div class="spctrl"></div>　　获取CTime对象表示时间的日期。范围为1到31。 
<div class="spctrl"></div>　　int GetHour( ) const; 
<div class="spctrl"></div>　　获取CTime对象表示时间的小时。范围为0到23。 
<div class="spctrl"></div>　　int GetMinute( ) const; 
<div class="spctrl"></div>　　获取CTime对象表示时间的分钟。范围为0到59。 
<div class="spctrl"></div>　　int GetSecond( ) const; 
<div class="spctrl"></div>　　获取CTime对象表示时间的秒。范围为0到59。 
<div class="spctrl"></div>　　int GetDayOfWeek( ) const; 
<div class="spctrl"></div>　　此函数的返回值表示CTime对象代表的是星期几，1表示是周日，2表示是周一，以此类推。<br />&nbsp;<br />操作与比较：<br />CTime operator +(CTimeSpan timeSpan) const; 
<div class="spctrl"></div>　　将CTime对象和CTimeSpan对象相加，返回一个CTime对象。实际意义就是在一个时间的基础上推后一个时间间隔，得到一个新的时间。 
<div class="spctrl"></div>CTime operator -(CTimeSpan timeSpan) const; 
<div class="spctrl"></div>　　将CTime对象和一个CTimeSpan相减，返回一个CTime对象。实际意义就是在一个时间的基础上提前一个时间间隔，得到一个新的时间。 
<div class="spctrl"></div>CTimeSpan operator -(CTime time) const; 
<div class="spctrl"></div>　　将该CTime对象和另一个CTime对象相减，返回一个CTimeSpan对象。实际意义就是计算两个时间点的间隔，得到一个CTimeSpan对象。 
<div class="spctrl"></div>CTime&amp; operator +=(CTimeSpan span); 
<div class="spctrl"></div>　　为该CTime对象增加一个span表示的时间间隔。 
<div class="spctrl"></div>CTime&amp; operator -=(CTimeSpan span); 
<div class="spctrl"></div>　　为该CTime对象减去一个span表示的时间间隔。 
<div class="spctrl"></div>CTime&amp; operator =(__time64_t time); 
<div class="spctrl"></div>　　为该CTime对象赋予一个新的时间值。 
<div class="spctrl"></div>　　简单说下剩下的几个重载i运算符： 
<div class="spctrl"></div>　　operator == ： 比较两个绝对时间是否相等。 
<div class="spctrl"></div>　　operator != ： 比较两个绝对时间是否不相等。 
<div class="spctrl"></div>　　operator &gt; ： 比较两个绝对时间，是否前一个大于后一个。 
<div class="spctrl"></div>　　operator &lt; ： 比较两个绝对时间，是否前一个小于后一个。 
<div class="spctrl"></div>　　operator &gt;= ： 比较两个绝对时间，是否前一个大于等于后一个。 
<div class="spctrl"></div>　　operator &lt;= ： 比较两个绝对时间，是否前一个小于等于后一个<br /></div><img src ="http://www.cppblog.com/Mumoo/aggbug/195738.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Mumoo/" target="_blank">Mumoo</a> 2012-11-27 16:20 <a href="http://www.cppblog.com/Mumoo/archive/2012/11/27/195738.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ListControl 设置表格行高与字体</title><link>http://www.cppblog.com/Mumoo/archive/2012/11/20/195410.html</link><dc:creator>Mumoo</dc:creator><author>Mumoo</author><pubDate>Tue, 20 Nov 2012 08:00:00 GMT</pubDate><guid>http://www.cppblog.com/Mumoo/archive/2012/11/20/195410.html</guid><wfw:comment>http://www.cppblog.com/Mumoo/comments/195410.html</wfw:comment><comments>http://www.cppblog.com/Mumoo/archive/2012/11/20/195410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Mumoo/comments/commentRss/195410.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Mumoo/services/trackbacks/195410.html</trackback:ping><description><![CDATA[设置行高：<br />CImageList&nbsp;&nbsp; m_l;&nbsp;&nbsp; <br />&nbsp;m_l.Create(1,18,TRUE|ILC_COLOR32,1,0);&nbsp;&nbsp; <br />&nbsp;SetImageList(&amp;m_l,LVSIL_SMALL); <br /><br />设置字体： 
<p>&nbsp;</p>
<p>CFont m_font;</p>
<p>m_font.CreatePointFont(100, "新宋体");<br />m_listCtrl.SetFont(&amp;m_font);</p><img src ="http://www.cppblog.com/Mumoo/aggbug/195410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Mumoo/" target="_blank">Mumoo</a> 2012-11-20 16:00 <a href="http://www.cppblog.com/Mumoo/archive/2012/11/20/195410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>