【WPF】ListBox选中项取消不了

2019-05-17  本文已影响0人  UnicornChen

简介

用过MFC CListBox的都知道,列表框项一旦被选中,下一次想点击其空白处来取消该项的选择基本很难做到,因为CListBox会默认为把上一次选中的项作为当前的选项。 

那么如何通过鼠标单击空白处来取消选择项呢?BCGControlBar给了我们最好的答案。

实现方法

1、首先需要重写继承自CBCGPListBox类,我们命名为CTextListBox

class CTextListBox : public CBCGPListBox

{...}

2、由于CBCGPListBox中的HitTest(…)函数是个保护成员函数,所以我们要在CTextListBox类中添加一个公有成员函数并对HitTest(…)值进行返回,-1表示没选中。

int CTextListBox::HitItemTest(CPoint point)

{

    return HitTest(point);

}

3、之后在对CTexListBox控件(对应的变量名命名为m_SubPro)所在的对话框进行SelectChange消息重写,来实现鼠标单击到某项被选中,单击到空白处被取消。

void CRobotSimSetupDlg::OnLbnSelchangeListSubpro()

{

    CPoint point;

    GetCursorPos(&point);

    m_SubPro.ScreenToClient(&point);

    int iHit = m_SubPro.HitItemTest(point);

    m_SubPro.SetCurSel(iHit);

}

4、这样就实现了我们所要的功能。

上一篇下一篇

猜你喜欢

热点阅读