CListCtrl非激活状态高亮显示

之前遇到过,搜了半天,没记录,今天又遇到了,又搜了半天。
当你希望打开对话框时,CListCtrl默认选择一项时,这个很有用。
不知道MFC为什么这么简单的功能要搞这么复杂。
可能认识不够吧,总结点是点。

三个要点:
一、Always Show Selection:False
总是显示选定内容,即使控件没有焦点。
View:Report
二、一定要设置焦点
// 设置选中第二行
m_lstTest.SetFocus();
m_lstTest.SetItemState(1,LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
三、响应NM_CUSTOMDRAW
---------------------------------------
OnInitDialog();
m_lstTest.InsertColumn(0,"column0");
m_lstTest.InsertColumn(1,"column1");

m_lstTest.SetColumnWidth(0,80);
m_lstTest.SetColumnWidth(1,80);

m_lstTest.InsertItem(0,"row0");
m_lstTest.InsertItem(1,"row1");

m_lstTest.SetItemText(0,1,"row01");
m_lstTest.SetItemText(1,1,"row11");

// 设置选中第二行
m_lstTest.SetFocus();
m_lstTest.SetItemState(1,LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
NM_CUSTOMDRAW
void CmfcDlgDlg::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_lstTest.GetFirstSelectedItemPosition();
        int index = m_lstTest.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;
    }
}
url:http://greatverve.cnblogs.com/archive/2013/02/25/clistctrl-highlight.html
posted @ 2013-02-25 20:36  大气象  阅读(2360)  评论(1编辑  收藏  举报
http://www.tianqiweiqi.com