CListCtrl控件单击一行,如果保持前面选中的行为选中状态?

teleinfor 2019-11-15 03:05:54
默认,点击操作会取消之前选中的行。如果我记忆之前行状态,在OnClick事件里面重新设置 SetItemState则会导致严重的重绘闪烁问题!
我慢动作分解,鼠标点击另一行后,其他的选择行会失去状态。

我的需求是通过鼠标单击来实现多选。即点击1,3,5实现对1,3,5几行的选中,如果二次点击选中行,则翻转状态为未选中状态。
...全文
238 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sandrer 2019-11-25
  • 打赏
  • 举报
回复
参考8楼的方法, 允许列表在第一列加个checkbox, 用户只需选中checkbox即可
蒋晟 2019-11-16
  • 打赏
  • 举报
回复
听起来很像LVS_EX_AUTOCHECKSELECT啊?
schlafenhamster 2019-11-16
  • 打赏
  • 举报
回复
void CMyListCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
#if 1 // see PreTranslateMessage
SetFocus();// blue
//
LVHITTESTINFO hti;
hti.pt = point;
int Idx = HitTest(&hti);// or SubItemHitTest
afxDump << Idx << "\n";
if (Idx<0) return;
if(GetItemState(Idx, LVIS_SELECTED))
{
SetItemState(Idx,0, LVIS_SELECTED);
}
else
{
SetItemState(Idx,LVIS_SELECTED, LVIS_SELECTED);
}
#else
CListCtrl::OnLButtonDown(nFlags, point);
#endif
}
凌乱哥 2019-11-16
  • 打赏
  • 举报
回复
知道自绘原理的话就简单了。在ListCtrl内部自己维护一个各行是否选中的变量,比如
std::map<int, bool> m_mapSelectState;
绘制的时候根据bool值来绘制,点击的时候根据bool来设置新值,就搞定了
zgl7903 2019-11-15
  • 打赏
  • 举报
回复

#pragma once

// CMyListCtrl
class CMyListCtrl : public CListCtrl
{
  DECLARE_DYNAMIC(CMyListCtrl)

public:
  CMyListCtrl()
    virtual ~CMyListCtrl() 

public:
  virtual BOOL PreTranslateMessage(MSG* pMsg)
  {
    switch(pMsg->message)
    {
    case(WM_LBUTTONDOWN):
    case(WM_LBUTTONUP):
      {
        pMsg->wParam |= MK_CONTROL; //模拟按下CTRL按键
        break;
      }
    }

    return __super::PreTranslateMessage(pMsg);
  }

protected:
  DECLARE_MESSAGE_MAP()
};

孤客天涯 2019-11-15
  • 打赏
  • 举报
回复
引用 5 楼 teleinfor 的回复:
[quote=引用 3 楼 孤客天涯 的回复:] CListCtrl支持多行选择
触屏,没键盘,不支持ctrl/shift多选。咋办?[/quote] 办法有很多,第一个可以模拟ctrl按键, 另一个为什么非得用选中状态来做,不可以加个勾选框吗?
teleinfor 2019-11-15
  • 打赏
  • 举报
回复
引用 3 楼 孤客天涯 的回复:
CListCtrl支持多行选择
触屏,没键盘,不支持ctrl/shift多选。咋办?
teleinfor 2019-11-15
  • 打赏
  • 举报
回复
我的需求是不要通过CTRL/SHIFT键,实现多选。而是仅仅通过鼠标单击实现多选。没有键盘,触屏操作。
引用 2 楼 schlafenhamster 的回复:
我的需求是通过鼠标单击来实现多选 CListCtrl 有·多选 属性 , 不必自己搞 !
孤客天涯 2019-11-15
  • 打赏
  • 举报
回复
CListCtrl支持多行选择
schlafenhamster 2019-11-15
  • 打赏
  • 举报
回复
我的需求是通过鼠标单击来实现多选
CListCtrl
有·多选 属性 , 不必自己搞 !
zgl7903 2019-11-15
  • 打赏
  • 举报
回复
一般的多选操作 按下Ctrl键,然后选择

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧