设置ListView控件的Check Boxes状态<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
aawolf按:最近在项目里用到了ListView的这个属性,尽管这篇文章在MSDN里的评价并不是很高,但对于需要这种属性的工程还是比较好的指导材料。所以拿来和大家一同分享,希望大家继续关注我的专栏:http://www.youkuaiyun.com/develop/author/netauthor/aawolf/
What You Need
· Microsoft eMbedded Visual Tools 3.0
· Good working knowledge of Microsoft eMbedded Visual C++
Background
在设计一个用户界面时,你经常需要对一系列的选择给出一个可见的提示。这可以用不同的图标表示,或者使用一个Check Box控件。Pocket PC ListView控件提供内建的Check Box功能(见图)。
| <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 179.25pt; HEIGHT: 239.25pt" o:ole="" alt="" type="#_x0000_t75"><img o:title="" src="/Develop/ArticleImages/20/20000/优快云_Dev_Image_2003-7-241902490.wmz"><font size="3"></font></shape> |
在Pocket PC SDK中你会发现ListView中ListView_GetCheckState宏允许检查一个List Item的Check box状态。不幸的是,相应的ListView_SetCheckState宏没有被包含到Microsoft Visual C++的头文件中去,比如Pocket PC 2000 SDK和Pocket PC 2002 SDK当前的Beta版本。这个宏被包含到了平台SDK和MSDN的文档中。它将被添加到Pocket PC 2002 SDK的最终版本中。
如果你看一下ListView_GetCheckState 在 commctrl.h中的定义,你将看到Check Box状态被保存在12bit的Item data中。
Adding the Missing Pieces
通过ListView_GetCheckState的逻辑,设置或者清空这个字将直接影响Check Box的状态,设置或者取消Check标志。因此,ListView_SetCheckState命令可以被跟踪实现。拷贝并粘贴这个宏到你的代码中,就可以使它工作。(aawolf:在Pocket PC 2002以上的SDK中已经包含了这个宏,直接使用就可以了)
注意INDEXTOSTATEIMAGEMASK将值移动12位。
Using the Checkboxes
为了使用ListView的Check Box,你需要设置LVS_EX_CHECKBOXES风格:
该风格在List的第一列中留出足够的空间,并且在文字的前面画出Check Box。当你想设置Check Box时,你需要调用ListView_SetCheckState控制句柄、Item索引和期望的状态。
同样,你可以通过调用ListView_GetCheckState来得到Check Box的状态:
本文围绕设置ListView控件的Check Boxes状态展开。介绍了所需工具,如Microsoft eMbedded Visual Tools 3.0等。指出Pocket PC SDK中ListView_SetCheckState宏未包含在部分版本头文件,可跟踪实现该命令。还说明了使用Check Box需设置LVS_EX_CHECKBOXES风格及相关调用方法。
2031

被折叠的 条评论
为什么被折叠?



