listctrl控件中使用checkbox

(1)首先,设置list列表的风格

ListView_SetExtendedListViewStyle 
   (m_lvTestList.m_hWnd, LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);

使得list控件支持checkbox

LVS_EX_CHECKBOXESlist的每一个item都可以使用checkbox控件,可以通过使用宏ListView_GetCheckState 来获得checkbox的状态
LVS_EX_FULLROWSELECT当一个item被选中时,它的所有subitems也处于被选中状态,点击任意一个subitem,则可同时选中整个行. 只适用于LVS_REPORT 风格
LVS_EX_GRIDLINES网格线,只适用于LVS_REPORT 风格
LVS_EX_HEADERDRAGDROP支持列头的拖拽, 只适用于LVS_REPORT 风格
LVS_EX_SUBITEMIMAGES可在subitem中插入图标 ,只适用于LVS_REPORT 风格
LVS_EX_TRACKSELECT如果鼠标停留在某个item上超过1秒钟,则此item显示为被选中状态.适用于任何风格的List控件

 

(2)当一个checkbox被check或uncheck的时候,如何获得通知

添加消息映射

                       ON_NOTIFY(LVN_ITEMCHANGED, IDC_MYLIST, OnItemchangedLinksList)

消息处理函数

void DemoDlg::OnItemchangedLinksList(NMHDR* pNMHDR, LRESULT* pResult)
{
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    *pResult = 0;

    if (pNMListView->uOldState == 0 && pNMListView->uNewState == 0)
        return;    // No change


    // Old check box state
    BOOL bPrevState = (BOOL)(((pNMListView->uOldState &
                LVIS_STATEIMAGEMASK)>>12)-1); 
    if (bPrevState < 0)    // On startup there's no previous state
        bPrevState = 0; // so assign as false (unchecked)

    // New check box state
    BOOL bChecked =
            (BOOL)(((pNMListView->uNewState & LVIS_STATEIMAGEMASK)>>12)-1);  
    if (bChecked < 0) // On non-checkbox notifications assume false
        bChecked = 0;

    if (bPrevState == bChecked) // No change in check box
        return;
   
    // Now bChecked holds the new check box state

    // ....
}

(3)设置某个item的checkbox的状态

void SetLVCheck (WPARAM ItemIndex, BOOL bCheck)
{
    ListView_SetItemState (m_lvTestList.m_hWnd, ItemIndex,
        UINT((int(bCheck) + 1) << 12), LVIS_STATEIMAGEMASK);
}

(4)获得某个item的checkbox的状态

使用宏 ListView_GetCheckState(hwndLV, i)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在VC++ListCtrl控件实现Checkbox,你可以按照以下步骤进行操作: 1. 创建一个ListCtrl控件并设置其风格为`LVS_REPORT`,这将使其以报表形式显示数据。 2. 添加所需的列,可以使用`InsertColumn`方法来添加列,设置其标题和宽度。 3. 通过调用`SetExtendedStyle`方法设置控件的样式,以启用Checkbox功能。使用`LVS_EX_CHECKBOXES`作为参数。 4. 添加行数据,可以使用`InsertItem`方法插入行,然后使用`SetItemText`方法设置每个单元格的文本。 5. 当用户点击Checkbox时,您可以使用`GetCheckState`方法获取其状态,并执行相应的操作。 以下是一个简单的示例代码,用于在ListCtrl控件实现Checkbox功能: ```cpp // 定义一个ListCtrl控件对象 CListCtrl m_ListCtrl; // 创建ListCtrl控件 m_ListCtrl.Create(WS_VISIBLE | WS_CHILD | LVS_REPORT, CRect(10, 10, 300, 200), this, IDC_LISTCTRL); // 设置风格和样式 m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES); m_ListCtrl.InsertColumn(0, _T("Column 1"), LVCFMT_LEFT, 100); m_ListCtrl.InsertColumn(1, _T("Column 2"), LVCFMT_LEFT, 100); // 添加行数据 m_ListCtrl.InsertItem(0, _T("Item 1")); m_ListCtrl.SetItemText(0, 1, _T("Data 1")); m_ListCtrl.InsertItem(1, _T("Item 2")); m_ListCtrl.SetItemText(1, 1, _T("Data 2")); // 处理Checkbox点击事件 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if ((pNMListView->uChanged & LVIF_STATE) && (pNMListView->uNewState & LVIS_STATEIMAGEMASK)) { int nItem = pNMListView->iItem; int nState = m_ListCtrl.GetCheckState(nItem); // 根据Checkbox状态执行相应操作 if (nState == 0) { // Checkbox被取消选 } else if (nState == 1) { // Checkbox被选 } } ``` 这个示例代码演示了如何在ListCtrl控件实现Checkbox功能。你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值