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(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(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,mfc,c++)