为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”属性不要选中