您的位置:首页 > 其它

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

2017-06-26 11:53 295 查看
为CListCtrl控件添加NM_CUSTOMDRAW事件响应函数,这样当我们点击界面的其他地方地方时,列表中的选中项仍处于选中状态。
void CMainFrame::OnNMCustomdrawRecQueryList(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_lstRecQueryRes.GetFirstSelectedItemPosition();
int index = m_lstRecQueryRes.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 m_lstRecQueryRes//控件变量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: