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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值