让CListCtrl选中行保持其蓝色高亮状态

具体可参考CSDN帖子:http://bbs.csdn.net/topics/320214522。在使用list control 控件时,当点击其它对话框或控制时,要想让控件保持选中行为高亮(比如一般为蓝色),我们可以在控件中右击添加NM_CUSTOMDRAW事件响应函数,同时需要把控件的Show Always Selection属性置为false

具体代码如下:

void CAutodata::OnNMCustomdrawListAutodata(NMHDR *pNMHDR, LRESULT *pResult)
{
 NMLVCUSTOMDRAW* pLVCD = reinterpret_cast( pNMHDR );
 
    *pResult = CDRF_DODEFAULT;
 
    if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
    {
        *pResult = CDRF_NOTIFYITEMDRAW;
    }
    else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
    {
        *pResult = CDRF_NOTIFYSUBITEMDRAW;
    }
    else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage )
    {
 
        COLORREF clrNewTextColor, clrNewBkColor;
 
        int nItem = static_cast( pLVCD->nmcd.dwItemSpec );
        
        POSITION pos = m_ListData.GetFirstSelectedItemPosition();
        int index = m_ListData.GetNextSelectedItem(pos);
        
        if (index == nItem)//如果要刷新的项为当前选择的项,则将文字设为白色,背景色设为蓝色
        {
            clrNewTextColor = RGB(255,255,255);        //Set the text to white
            clrNewBkColor = RGB(49,106,197);        //Set the background color to blue
        }
        else
        {
            clrNewTextColor = RGB(0,0,0);        //set the text black
            clrNewBkColor = RGB(255,255,255);    //leave the background color white
        }
 
        pLVCD->clrText = clrNewTextColor;
        pLVCD->clrTextBk = clrNewBkColor;
 
        *pResult = CDRF_DODEFAULT;
    }
}

其中m_ListData为控件添加的变量。经测试OK。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部