ListBox选中项取消不了,BCG里的黑科技

ListBox选中项取消不了,BCG里的黑科技

简介

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值