本文主要是介绍MFC—CTabCtrl 、CListCtrl,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
为了方便自己查找
1、官方文档
CTabCtrl
CListCtrl
2、create(窗口样式)
基本上安流程来都能出出来。看一下视图的窗口样式。主要是report的。
CTabCtrl选项卡控件样式
CListCtrl列表视图窗口样式(这里的名字又变了,List-View窗口样式)
CListCtrl扩展视图列表样式(这里的名字变了,扩展List-View样式)
说真的,这些名字起得真花。
3、创建带复选框的
如果是要带复选框,需要先创建,再用SetExtendedStyle附带扩展样式。
4、CListCtrl 项操作
list-View项状态
自己进入一个误区,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;
}
这篇关于MFC—CTabCtrl 、CListCtrl的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!