⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0508001.htm

📁 VC知识库5_chm_decompile_20040520_210715
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title></title>
<link rel="stylesheet" type="text/css" href="../../vckbase.css">
</head>

<body>

<div align="justify">
  <table border="0" width="100%" class="font" height="57">
    <tr>
      <td width="27%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
      <font color="#800080">VC知识库(五)</font>
      </td>
      <td width="73%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
      <font color="#800080">www.vckbase.com</font>
      </td>
    </tr>
    <tr>
      <td width="100%" height="4" class="header" valign="top" align="center" colspan="2">
      <hr>
      </td>
    </tr>
    <tr>
      <td width="100%" height="17" class="header" valign="top" align="center" colspan="2">
      在ListControl中使用检查框
      </td>
    </tr>
    <tr>
      <td width="100%" height="17" class="info" align="center" colspan="2">

<a href="mailto:wyy_cq@188.net">闻怡洋</a>翻译 <a href="http://vchelp.yeah.net">http://vchelp.yeah.net</a> 
      </td>   
    </tr>   
    <tr>  
      <td width="100%" height="22" class="font" colspan="2"> 
        <hr> 
      </td>   
    </tr>  
    <tr>  
      <td width="100%" height="5" class="font" colspan="2">  
 
<small> 
 
This article was contributed by <a href="mailto:s2848447@t2.technion.ac.il">Eran Yariv</a>. 
 
<p>List Control/View给了界面设计者更多的选择,开发者可以方便的显示列表。下面我们介绍一中带有检查框的ListCtrl,其中你可以得到用户的点击情况以改变选择状态。我们将利用一个CListCtrl的派生类CCheckListBox来实现。</p> 
 
<p>你可以使用OWNER_DRAW风格来自己绘制检查框(我以前翻译过一篇文章是利用改变状态来显示不同IMG,有兴趣可以查查 译者),还有一种简单的方法是利用IE3中带有的新风格。 
 
</p> 
 
 
 
<p>本文介绍一些新的风格,这些可以在VC5或更高版本上使用。</p> 
 
 
 
<p>首先我们需要更改CONTROL的风格。</p> 
 
 
 
<TT><FONT COLOR="#990000"><PRE>ListView_SetExtendedListViewStyle 

   (m_lvTestList.m_hWnd, LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);</PRE></FONT></TT> 
 
 
 
  
 
<p>下面介绍一些新的风格: 
 
 
 
<table border=2> 
 
<tr valign=top><td><small>LVS_EX_CHECKBOXES</small></td> 
 
<td><small>使用检查框</small></td> 
 
</tr> 
 
<tr valign=top><td><small>LVS_EX_FULLROWSELECT</small></td> 
 
<td><small>选择整行</small></td> 
 
</tr> 
 
<tr valign=top><td><small>LVS_EX_GRIDLINES</small></td><td><small>在REPORT中画出分隔线</small></td> 
 
</tr> 
 
<tr valign=top><td><small>LVS_EX_HEADERDRAGDROP</small></td> 
 
<td><small>LVS_REPORT时可以利用drag-and-drop重新排序</small></td> 
 
</tr> 
 
<tr valign=top><td><small>LVS_EX_SUBITEMIMAGES</small></td> 
 
<td><small>允许在子项中显示image</small></td> 
 
</tr> 
 
<tr valign=top><td><small>LVS_EX_TRACKSELECT<small></td> 
 
<td><small>当鼠标指到某一项时便自动选择该项</small></td></tr> 
 
</table> 
 
 
 
映射下面的消息:<TT><FONT COLOR="#990000"><PRE>ON_NOTIFY(LVN_ITEMCHANGED, IDC_MYLIST, OnItemchangedLinksList)</PRE></FONT></TT> 
 
<p>得到检查状态</p> 
 
<TT><FONT COLOR="#990000"><PRE><font color="#0000ff">void</font> DemoDlg::OnItemchangedLinksList(NMHDR* pNMHDR, LRESULT* pResult) 
{

	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

	*pResult = 0;

	<font color="#0000ff">if</font> (pNMListView-&gt;uOldState == 0 &amp;&amp; pNMListView-&gt;uNewState == 0)

		<font color="#0000ff">return</font>;	<font color="#009900">// No change</font>

	BOOL bPrevState = (BOOL)(((pNMListView-&gt;uOldState &amp; 

				LVIS_STATEIMAGEMASK)&gt;&gt;12)-1);   <font color="#009900">// Old check box state</font>

	<font color="#0000ff">if</font> (bPrevState &lt; 0)	<font color="#009900">// On startup there's no previous state </font>

		bPrevState = 0; <font color="#009900">// so assign as false (unchecked)</font>



	<font color="#009900">// New check box state</font>

	BOOL bChecked=(BOOL)(((pNMListView-&gt;uNewState &amp; LVIS_STATEIMAGEMASK)&gt;&gt;12)-1);   

	<font color="#0000ff">if</font> (bChecked &lt; 0) <font color="#009900">// On non-checkbox notifications assume false</font>

		bChecked = 0; 

	<font color="#0000ff">if</font> (bPrevState == bChecked) <font color="#009900">// No change in check box</font>

		<font color="#0000ff">return</font>;

	<font color="#009900">// Now bChecked holds the new check box state</font>
	<font color="#009900">// ....</font>
}</PRE></FONT></TT> 
 
 
 
<p>设置检查框状态</p> 
 
<TT><FONT COLOR="#990000"><PRE><font color="#0000ff">void</font> SetLVCheck (WPARAM ItemIndex, BOOL bCheck)
{

	ListView_SetItemState (m_lvTestList.m_hWnd, ItemIndex, 

		UINT((<font color="#0000ff">int</font>(bCheck) + 1) &lt;&lt; 12), LVIS_STATEIMAGEMASK);

}</PRE></FONT></TT> 
 
<p>得到检查框状态</P> 
 
<p>使用在commctl.h中定义的宏 ListView_GetCheckState(hwndLV,i);hwndLV为CONTROL的句柄,i为位置索引。 
 
</p> 
 
 
 
 
 
      </td>     
    </tr>    
    <tr> 
      <td width="100%" height="12" class="font" colspan="2">  
      </td>     
    </tr> 
    <tr> 
      <td width="100%" height="6" class="font" colspan="2">  
      </td>     
    </tr> 
    <tr> 
      <td width="100%" height="8" class="font" colspan="2">  
      </td>     
    </tr> 
    <tr>    
      <td width="100%" height="17" class="font" colspan="2"></td>     
    </tr>    
  </table>     
</div>     
     
</body>     
     
</html>     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -