结合icon图标的CListCtrl折叠和展开实施方法

类似上图所示,通过CListCtrl控件实现一个局部列表折叠和展开。

步骤一:设计两个小图标,其中“+”标识折叠状态,“-”标识展开状态;

步骤二:CListCtrl初始化为report方式,设置如下几个属性

LONG lStyle;
lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口style
lStyle &= ~LVS_TYPEMASK; //清除显示方式位
lStyle |= LVS_REPORT; //设置style
SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置style
 
DWORD dwStyle = m_list.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
dwStyle |= LVS_EX_SUBITEMIMAGES;//item前生成checkbox控件
m_list.SetExtendedStyle(dwStyle); //设置扩展风格

步骤三:初始化图标

CImageList* pImgList = &m_ImageList;
HICON hIcon[2];

pImgList->Create(12, 16, ILC_COLOR24 | ILC_MASK, 0, 2);
hIcon[0] = AfxGetApp()->LoadIcon(IDI_ICON_PLUS_16);
hIcon[1] = AfxGetApp()->LoadIcon(IDI_ICON_MINUS_16);
for (int i = 0; i < 2; i++)
	pImgList->Add(hIcon[i]);
m_ctrlListTagInfo.SetImageList(pImgList, LVSIL_SMALL);

步骤四:增加隐藏列,规避首列默认图标

#define MAKE_LIST_HEADER(lst) \
  lst.InsertColumn(0, _T(""), LVCFMT_LEFT, 0, 0);/*add col-0: always hidden column */\
  lst.InsertColumn(1, _T("Field"), LVCFMT_LEFT, rect.Width()*8/16, 1);\
  lst.InsertColumn(2, _T("Value (Desc)"), LVCFMT_LEFT, rect.Width()*8/16, 2);

步骤五:数据插入方式及更新

#define LIST_SET_ICON_SUBITEM(n, nSubItem, strKey, nImageIndex)\
{\
	LVITEM it;\
	it.mask     = LVIF_IMAGE | LVIF_TEXT;\
	it.iImage   = (nImageIndex);\
	it.iItem    = n;\
	it.iSubItem = nSubItem;\
	it.pszText  = strKey;\
	lst.SetItem(&it);\
}

#define HYS_LIST_INSERT_INT_KVD_ICON(strKey, nVal, strDesc, nImageIndex) \
{\
	LIST_INSERT_NEW_ROW(nRow);\
	LIST_SET_ICON_SUBITEM(nRow, 1, strKey, nImageIndex);\
	strHex.Format(_T("%d (%s)"), (nVal), (strDesc));\
	lst.SetItemText(nRow, 2, strHex);\
	nRow++;\
}

通过鼠标双击对应行,达到折叠和展开的数据刷新方式,网上资料较多,在此不赘述。

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值