CListCtrl报表视图中没有颜色

时间:2014-07-08 22:00:04

标签: c++ visual-studio-2010 mfc

我以前做过这个,但令我惊讶的是CListCtrl不会显示文字的颜色。我在对话框上有列表视图控件。我正在使用VS2010,还有其他我需要的东西吗?

void CGameView::OnCustomdrawListBatsmen(NMHDR *pNMHDR, LRESULT *pResult)
{
    //LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);

    LPNMLVCUSTOMDRAW pNMLVCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
    *pResult = CDRF_DODEFAULT;

    switch( pNMLVCD->nmcd.dwDrawStage )
    {
    case CDDS_PREPAINT:
        *pResult = CDRF_NOTIFYITEMDRAW;
        break;

    case CDDS_ITEMPREPAINT:
        pNMLVCD->clrTextBk = RGB(255,0,0);
        pNMLVCD->clrText = RGB(255, 0, 0 );
        *pResult = CDRF_NOTIFYSUBITEMDRAW;
        break;

    case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
    //  if( pNMLVCD->iSubItem == 1 )
            pNMLVCD->clrTextBk = RGB(0,255,0);
            pNMLVCD->clrText = RGB(255, 0, 0 );
        break;
    }
    *pResult = 0;
}

当我调试它时,控件永远不会通过第一种情况!我不知道是那个?我是否需要在资源视图中设置列表控件属性?

2 个答案:

答案 0 :(得分:0)

也许, 在CGameView中,添加:

1

ON_NOTIFY(LVN_GETDISPINFO, IDC_LIST_Batsmen, GetDispInfo)

2

void CGameView::GetDispInfo(NMHDR* pNMHDR, LRESULT* pResult)

在CListCtrl类中,添加:

ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomdrawListBatsmen)

答案 1 :(得分:0)

我解决了这个问题,这是最后一行:

 *pResult = 0;

需要删除它,因为它正在重置在switch case中设置的任何值。