默认,点击操作会取消之前选中的行。如果我记忆之前行状态,在OnClick事件里面重新设置 SetItemState则会导致严重的重绘闪烁问题!
我慢动作分解,鼠标点击另一行后,其他的选择行会失去状态。我的需求是通过鼠标单击来实现多选。即点击1,3,5实现对1,3,5几行的选中,如果二次点击选中行,则翻转状态为未选中状态。
我慢动作分解,鼠标点击另一行后,其他的选择行会失去状态。我的需求是通过鼠标单击来实现多选。即点击1,3,5实现对1,3,5几行的选中,如果二次点击选中行,则翻转状态为未选中状态。
CListCtrl
有·多选 属性 , 不必自己搞 !
另一个为什么非得用选中状态来做,不可以加个勾选框吗?
#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()
};
{
// 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
}