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

    技术2026-09-13  14

    为CListCtrl控件添加NM_CUSTOMDRAW事件响应函数,这样当我们点击界面的其他地方地方时,列表中的选中项仍处于选中状态。

    afx_msg void OnNMCustomDrawList(NMHDR* pNMHDR, LRESULT* pResult);

    ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST_CALL_DATA, OnNMCustomDrawList)

     

    void CDataCallDlg::OnNMCustomDrawList(NMHDR *pNMHDR, LRESULT *pResult){    NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( 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<int>( pLVCD->nmcd.dwItemSpec );                POSITION pos = m_ctrlList.GetFirstSelectedItemPosition();        int index = m_ctrlList.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;    }}

     

    CListCtrl控件的“Show Always Selection”属性不要选中

    最新回复(0)