带有复选框的CListCtrl/CListView 的对checkbox的操作
来源:互联网 发布:linux ide工具 编辑:程序博客网 时间:2024/05/17 06:52
设置ListView控件的Check Boxes状态
aawolf按:最近在项目里用到了ListView的这个属性,尽管这篇文章在MSDN里的评价并不是很高,但对于需要这种属性的工程还是比较好的指导材料。所以拿来和大家一同分享,希望大家继续关注我的专栏:http://www.csdn.net/develop/author/netauthor/aawolf/
What You Need
· Microsoft eMbedded Visual Tools 3.0
· Goodworking knowledge of Microsoft eMbedded Visual C++
Background
在设计一个用户界面时,你经常需要对一系列的选择给出一个可见的提示。这可以用不同的图标表示,或者使用一个Check Box控件。Pocket PC ListView控件提供内建的CheckBox功能(见图)。
Figure: Check boxes allow intuitive selection of ListView items.
在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中的定义,你将看到CheckBox状态被保存在12bit的Item 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中已经包含了这个宏,直接使用就可以了)
////f为BOOL型
#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
为了使用ListView的Check 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中是有效的,这可以让你的程序通过很简单的方式得到视觉效果上的优势。
转载:http://www.moon-soft.com/doc/13766.htm
- 带有复选框的CListCtrl/CListView 的对checkbox的操作
- CListCtrl的checkbox操作
- JQUERY对复选框(CHECKBOX)的的操作
- jquery对复选框(checkbox)的操作汇总
- jquery对radio单选框和CheckBox复选框的操作
- GridView获取带有复选框(CheckBox)的行信息
- CListView::GetListCtrl是如何将CListView*转换为CListCtrl*的
- CListCtrl复选框的问题
- input checkbox 复选框的操作示例
- jquery操作复选框(checkbox)的方式
- 带有CheckBox的CListCtrl中Check状态的获取
- 对带有Checkbox的DataGrid数据删除确认操作
- vc CListView和CListCtrl的使用
- 关于CListView和CListCtrl的排序!
- jQuery对复选框(checkbox)的全选,全不选,反选等的操作
- jquery 循环获取checkBox的值,以及对复选框选中,取消,操作按钮
- 带有checkbox的树的操作(Extjs)
- Webwork对checkbox复选框Action的处理
- 键盘绑定
- linux I/O和oracle的关系(一)
- Android中ExpandableListView控件基本使用
- TCP Socket服务器编程
- 人人都来写算法 之 矩阵顺时针旋转90度,空间效率O(1),时间效率O(n*n)
- 带有复选框的CListCtrl/CListView 的对checkbox的操作
- 心情不太好
- Binder基本概念流程学习
- 经典SQL语句大全
- 从Excel到XML到cocos2d-x
- 认识NHitenate
- java 操作visio-- com4j方式
- Python + SQLAlchemy + MySQL出现IntegrityError, Duplicate entry - 1062
- Android基础总结之六:Sevice