简介
用过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、这样就实现了我们所要的功能。
网友评论