CListCtrl 失去焦点仍然显示选中高亮


CListCtrl中需要把选中的item高亮显示时只需要调用SetItemState传入LVIS_SELECTED就好。
但是这样需要把焦点设置到CListCtrl上,一旦CListCtrl失去焦点高亮就会消失。


最近工作中遇到一个需求,需要让CListCtrl在失去焦点的情况下依然显示高亮的item。
总的来说有三种方法来实现这个功能。

继承CListCtrl然后重绘

太麻烦了不想用这个……

NM_CUSTOMDRAW事件

这个是一个类似于回调的处理过程,Windows在绘制List Ctrl的某个时间点上发送这个消息,可以选择忽略所有的通知,或者处理某部分的绘制,甚至绘制整个控件。用起来比较灵活方便,我只重绘被选中的那个item就好。 参考帖子

    void CMainFrame::OnNMCustomdrawRecQueryList(NMHDR *pNMHDR, LRESULT *pResult)
    {
        NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );

        *pResult = CDRF_DODEFAULT;

        if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
        {
            *pResult 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值