为了方便自己查找
1、官方文档
2、create(窗口样式)
基本上安流程来都能出出来。看一下视图的窗口样式。主要是report的。
CListCtrl列表视图窗口样式(这里的名字又变了,List-View窗口样式)
CListCtrl扩展视图列表样式(这里的名字变了,扩展List-View样式)
说真的,这些名字起得真花。
3、创建带复选框的
如果是要带复选框,需要先创建,再用SetExtendedStyle附带扩展样式。
4、CListCtrl 项操作
自己进入一个误区,LVN_ITEMCHANGED的消息响应函数,项状态太多,不好处理。需要拆开。
(1)单击
单机选中,再次单击取消选中,复选框进行勾选 参考代码
void CrvtFaultRodDlg::OnNMClickListrod(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
CheckPtrDet(pNMItemActivate);
if (pNMItemActivate->iItem == -1) return;
bool bCheck = mList.GetCheck(pNMItemActivate->iItem);
mList.SetCheck(pNMItemActivate->iItem, !bCheck);
mList.SetItemState(pNMItemActivate->iItem, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
HightRod(pNMItemActivate->iItem);
*pResult = 0;
}
(2)单击复选框不生效
ListView_SetCheckState 要用这个,网上完全没有示例,含义私信我WX
void CrvtFaultRodDlg::OnNMClickListrod(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
CheckPtrDet(pNMItemActivate);
if (pNMItemActivate->iItem == -1) return;
UINT nFlag;
int nItem = mList.HitTest(pNMItemActivate->ptAction, &nFlag);
//判断是否点在checkbox上
if (nFlag == LVHT_ONITEMSTATEICON)
{
BOOL fCheck = mList.GetCheck(pNMItemActivate->iItem) ? FALSE : TRUE;
ListView_SetCheckState(mList.m_hWnd, TVIS_OVERLAYMASK, fCheck);
UINT staMsk = fCheck ? LVIS_FOCUSED | LVIS_SELECTED : LVIS_FOCUSED;
mList.SetItemState(pNMItemActivate->iItem, staMsk, staMsk);
}
else
{
bool bCheck = !mList.GetCheck(pNMItemActivate->iItem);
mList.SetCheck(pNMItemActivate->iItem, bCheck);
UINT staMsk = bCheck ? LVIS_FOCUSED | LVIS_SELECTED : LVIS_FOCUSED;
mList.SetItemState(pNMItemActivate->iItem, staMsk, staMsk);
}
HightRod(pNMItemActivate->iItem);
*pResult = 0;
}