Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4460376
  • 博文数量: 356
  • 博客积分: 10458
  • 博客等级: 上将
  • 技术积分: 4734
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-24 14:59
文章分类

全部博文(356)

文章存档

2020年(17)

2019年(9)

2018年(26)

2017年(5)

2016年(11)

2015年(20)

2014年(2)

2013年(17)

2012年(15)

2011年(4)

2010年(7)

2009年(14)

2008年(209)

分类: C/C++

2008-04-17 22:24:29

原创代码下载CheckListCtrl.rar

1 建立测试工程
    新建一个对话框工程,并添加一个CListCtrl控件,并关联一个成员变量m_List。
2 设置LVS_EX_CHECKBOXES风格
    ListView_SetExtendedListViewStyle(m_List.GetSafeHwnd(), m_List.GetExStyle() | LVS_EX_CHECKBOXES);
3 为listctrl添加测试项
    在OnInitDialog()中添加如下代码:
     m_List.InsertColumn(0,"Name",LVCFMT_LEFT,150);
     m_List.InsertColumn(1,"Sex",LVCFMT_LEFT,200);
     m_List.InsertItem(0, "ZhangSan");
     m_List.InsertItem(1, "LiSi");
4 添加控件通知消息
    为ListCtrl控件添加LVN_ITEMCHANGED消息。系统生成如下代码:
void CXXXDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: Add your control notification handler code here

*pResult = 0;
}

5 在LVN_ITEMCHANGED消息处理函数中添加代码如下:
void CXXXDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: Add your control notification handler code here

/*
typedef struct tagNMLISTVIEW
{
NMHDR hdr;
int iItem;
int iSubItem;
UINT uNewState;
UINT uOldState;
UINT uChanged;
POINT ptAction;
LPARAM lParam;
} NMLISTVIEW, *LPNMLISTVIEW;
*/

if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(1)) /* old state : unchecked */
  && (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(2)) /* new state : checked */
  )
{
  TRACE("Item %d is checked\n", pNMLV->iItem);
}
else if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(2)) /* old state : checked */
  && (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(1)) /* new state : unchecked */
  )
{
  TRACE("Item %d is unchecked\n", pNMLV->iItem);
}
else
{
  TRACE("Item %d does't change the check-status\n", pNMLV->iItem);
}

*pResult = 0;
}

 

6 调试
在debug环境下,改变checkbox的选中状态,查看输出信息。
OK.

阅读(14519) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~