设置ListView控件的Check Boxes状态

    技术2022-05-11  142

    设置ListView控件的Check Boxes状态

    aawolf按:最近在项目里用到了ListView的这个属性,尽管这篇文章在MSDN里的评价并不是很高,但对于需要这种属性的工程还是比较好的指导材料。所以拿来和大家一同分享,希望大家继续关注我的专栏:http://www.csdn.net/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功能(见图)。

    Figure: Check boxes allow intuitive selection of ListView items.

    Pocket PC SDK中你会发现ListViewListView_GetCheckState宏允许检查一个List ItemCheck box状态。不幸的是,相应的ListView_SetCheckState宏没有被包含到Microsoft Visual C++的头文件中去,比如Pocket PC 2000 SDKPocket PC 2002 SDK当前的Beta版本。这个宏被包含到了平台SDKMSDN的文档中。它将被添加到Pocket PC 2002 SDK的最终版本中。

    如果你看一下ListView_GetCheckState commctrl.h中的定义,你将看到Check Box状态被保存在12bitItem data中。

      #define ListView_GetCheckState(hwndLV, i) /    ((((UINT)(SNDMSG((hwndLV), LVM_GETITEMSTATE, (WPARAM)i, LVIS_STATEIMAGEMASK))) >> 12) -1)

    Adding the Missing Pieces

    通过ListView_GetCheckState的逻辑,设置或者清空这个字将直接影响Check Box的状态,设置或者取消Check标志。因此,ListView_SetCheckState命令可以被跟踪实现。拷贝并粘贴这个宏到你的代码中,就可以使它工作。(aawolf:Pocket PC 2002以上的SDK中已经包含了这个宏,直接使用就可以了)

      #ifndef ListView_SetCheckState #define ListView_SetCheckState(h, i, f) /         ListView_SetItemState(h, i, INDEXTOSTATEIMAGEMASK((f) + 1), LVIS_STATEIMAGEMASK) #endif

    注意INDEXTOSTATEIMAGEMASK将值移动12位。

    #define INDEXTOSTATEIMAGEMASK(i) ((i) << 12)

    Using the Checkboxes

    为了使用ListViewCheck Box,你需要设置LVS_EX_CHECKBOXES风格:

    ListView_SetExtendedListViewStyle(hWndList, LVS_EX_CHECKBOXES);

    该风格在List的第一列中留出足够的空间,并且在文字的前面画出Check Box。当你想设置Check Box时,你需要调用ListView_SetCheckState控制句柄、Item索引和期望的状态。

    ListView_SetCheckState(hWndList, dwIndex, (bState ? 1 : 0));

    同样,你可以通过调用ListView_GetCheckState来得到Check Box的状态:

    ListView_GetCheckState(hWndList, dwIndex);

    Conclusion

    该功能的完整执行在最终的 Pocket PC SDK 中是有效的,这可以让你的程序通过很简单的方式得到视觉效果上的优势。

    最新回复(0)