2010-09-03 126 views
3

如何更改mfc中列表控件中的高亮颜色。 我在clistctrl中找不到任何api。 我有覆盖NM_CUSTOMDRAW描述msdn ,但是当我点击列表中的任何项目它显示半蓝色和半黑色 为什么蓝色即将到来?如何更改mfc中列表控件中的高亮颜色

回答

4

您需要覆盖NM_CUSTOMDRAW处理程序。检查this sample

+0

感谢您的链接。 我试过这个,但是点击列表控件时,它会以蓝色突出显示。会有什么问题? – Suri 2010-09-03 06:25:51

+0

@ user323422,不能说没有看到你的代码。 – 2010-09-03 06:44:09

+0

@Kirill V. Lyadvinsky蓝色是默认的高亮颜色? – Suri 2010-09-03 06:47:06

0

基于Kirill V. Lyadvinsky的回答,我设法改变了所选项目的颜色。

我的对话框类包含使用资源ID IDC_TEST_DEF_TREECTreeCtrl成员。
方法OnNMCustomdraw设置所选项目的颜色。消息处理程序注册的消息映射是这样的:

ON_NOTIFY(NM_CUSTOMDRAW, IDC_TEST_DEF_TREE, OnNMCustomdraw) 

的方法实现:

void CSelectTestDefinitionDlg::OnNMCustomdraw(NMHDR* pNMHDR, LRESULT* pResult) 
{ 
    LPNMLVCUSTOMDRAW lpLVCustomDraw = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR); 
    switch (lpLVCustomDraw->nmcd.dwDrawStage) 
    { 
    case CDDS_ITEMPREPAINT: 
    case CDDS_SUBITEM: 
     if (lpLVCustomDraw->nmcd.uItemState & CDIS_SELECTED) 
     { 
      // Your color definitions here: 
      lpLVCustomDraw->clrText = RGB(255, 255, 255); 
      lpLVCustomDraw->clrTextBk = RGB(0, 70, 60); 
     } 
     break; 

    default: 
     break; 
    } 

    *pResult = 0; 
    *pResult |= CDRF_NOTIFYPOSTPAINT; 
    *pResult |= CDRF_NOTIFYITEMDRAW; 
    *pResult |= CDRF_NOTIFYSUBITEMDRAW; 
} 
相关问题