CTabCtrl Ctrl单机选中 shift点击批量选

14 篇文章 0 订阅

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); 

  mbCtrlDown = KeyDown(VK_CONTROL);
  mbShiftDown = KeyDown(VK_SHIFT);

  if (!mbCtrlDown && !mbShiftDown)
  {
    //判断是否点在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);
      StdId id3d = GetId3d(pNMItemActivate->iItem);
      InsertIdSel(id3d, fCheck);
    }
    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);
      StdId id3d = GetId3d(pNMItemActivate->iItem);
      InsertIdSel(id3d, bCheck);
    }
    nRowFrist = pNMItemActivate->iItem;
    nRowSecond = -1;
    mnTime = 0;
  }

  if (mbCtrlDown)
  {
    // 重复点击不考虑以后再说不重要
    StdId id3d = GetId3d(pNMItemActivate->iItem);
    SetRowBackCol(id3d);
    nRowFrist = -1;
    nRowSecond = -1;
  }
  if (mbShiftDown)
  {
    if (nRowSecond == -1) 
      mnTime = 1;
    else
      mnTime++;
    int  nStart = min(nRowFrist, nRowSecond);
    int  nEnd = max(nRowFrist, nRowSecond);
    if (nStart != -1)
      for (int nRow = nStart; nRow <= nEnd; nRow++)
      {
        BOOL bCheck = FALSE;
        mList.SetCheck(nRow, bCheck);
      }
   
    nRowSecond = nRowFrist != -1 ? pNMItemActivate->iItem : nRowSecond;
    nRowFrist = nRowFrist == -1 ? pNMItemActivate->iItem : nRowFrist;
    nStart = min(nRowFrist, nRowSecond);
    nEnd = max(nRowFrist, nRowSecond);
    if (nStart != -1)
      for (int nRow = nStart; nRow <= nEnd; nRow++)
      {
        BOOL bCheck = TRUE;
        mList.SetCheck(nRow, bCheck);
      }
  }
  else
  {
    if (mnTime != 0)
    {
      nRowFrist = -1;
      nRowSecond = -1;
    }
  }
  HightRod(pNMItemActivate->iItem);
  mList.ShowWindow(SW_SHOW);
  *pResult = 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma_Hong_Kai

微信 2936729162

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值