我用atl向导作了一个wtl工程,想在里面加了一个listview,然后,想要自画,就是不同的行显示不同的颜色,可以
REFLECT_NOTIFICATIONS()在复合控件中,然后我不清楚在listview这一边怎么办,
class COwnerDrawnListViewCtrl : public CWindowImpl<TBase, CListViewCtrl>,
public COwnerDraw<TBase>
{
public:
BEGIN_MSG_MAP(COwnerDrawnListViewCtrl)
CHAIN_MSG_MAP_ALT(COwnerDraw<TBase>,1)//, 1
DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()
}
正常来讲,应该在atlframe.h中
BEGIN_MSG_MAP(COwnerDraw< T >)
MESSAGE_HANDLER(WM_DRAWITEM, OnDrawItem)
MESSAGE_HANDLER(WM_MEASUREITEM, OnMeasureItem)
MESSAGE_HANDLER(WM_COMPAREITEM, OnCompareItem)
MESSAGE_HANDLER(WM_DELETEITEM, OnDeleteItem)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(OCM_DRAWITEM, OnDrawItem)
MESSAGE_HANDLER(OCM_MEASUREITEM, OnMeasureItem)
MESSAGE_HANDLER(OCM_COMPAREITEM, OnCompareItem)
MESSAGE_HANDLER(OCM_DELETEITEM, OnDeleteItem)
END_MSG_MAP()的这一句到
MESSAGE_HANDLER(OCM_DRAWITEM, OnDrawItem)
到OnDrawItem函数,可是没有,因为发来的是Notifition消息.
是不是跟NM_CUSTOMDRAW有关???
哪位曾经作过这方面的工作的人说一下.能用MFC实现也行.只要能达到不同的行不同的颜色的一个listview就成.

解决方案 »

  1.   

    的这一句到
    MESSAGE_HANDLER(OCM_DRAWITEM, OnDrawItem)
    =================写错了==============================
    的这一句中的
    MESSAGE_HANDLER(OCM_DRAWITEM, OnDrawItem)
      

  2.   

    //mfc code
    BEGIN_MESSAGE_MAP(MyListCtrl, CListCtrl)
         ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
    END_MESSAGE_MAP()
    void MyListCtrl::OnCustomDraw(NMHDR *pHdr, LRESULT *pResult)
    {
        LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pHdr;switch(lplvcd->nmcd.dwDrawStage)
        {
        case CDDS_PREPAINT:
        // Request prepaint notifications for each item.
        *pResult = CDRF_NOTIFYITEMDRAW;
        break;
    case CDDS_ITEMPREPAINT: // Requested notification
        if(lplvcd->nmcd.dwItemSpec % 2)
        {
                lplvcd->clrText = RGB(0, 0, 0);
                lplvcd->clrTextBk = RGB( 255, 0, 0 );
        }
        *pResult = CDRF_DODEFAULT;
        break;
        }
    ......//加入代码
    }