簡體   English   中英

win32 ListView CustomDraw ,為什么 dwDrawStage 值總是等於 1

[英]win32 ListView CustomDraw , why dwDrawStage value is alway equal to 1

我正在研究 win32 列表視圖控件,想要實現 CustomDraw,

但我有一些奇怪的事情。我想知道為什么這個dwDrawStage值總是等於 1

bool rst = CreateWinEx(WC_LISTVIEW, NULL,
        WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_EDITLABELS  | LVS_NOCOLUMNHEADER | WS_BORDER,0,
        x,y,w,h,
        hwndParent_, NULL, GetModuleHandle(NULL));

列表視圖通知

LRESULT my::listView::OnListViewNotify(HWND hwnd,LPARAM lParam)
{

    NMLISTVIEW* pnmv= (NMLISTVIEW*)lParam;

    LRESULT lResult = 0;

    switch(pnmv->hdr.code)
    {
        case  NM_CUSTOMDRAW:
        {
            idebug("NM_CUSTOMDRAW\n");
            SetWindowLong(hWnd, DWL_MSGRESULT, (LONG)CustomDraw(lParam));
            return TRUE;
        }
        break;
    }
    return(lResult);
}

自定義繪圖

LRESULT  my::listView::CustomDraw( LPARAM lParam )
{
    //NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
    LPNMLVCUSTOMDRAW pLVCD = (LPNMLVCUSTOMDRAW) lParam;
    
    idebug("dwDrawStage:%d\n",pLVCD->nmcd.dwDrawStage);

     switch(pLVCD->nmcd.dwDrawStage) 
    {
        case CDDS_PREPAINT:
        {
            //request notifications for individual listview items
            return CDRF_NOTIFYITEMDRAW;
        }    
        case CDDS_ITEMPREPAINT: //Before an item is drawn
        {
            return CDRF_NOTIFYSUBITEMDRAW;
        }
        case CDDS_SUBITEM | CDDS_ITEMPREPAINT: //Before a subitem is drawn
        {
            switch(pLVCD->iSubItem)
            {
                case 0:
                {
                    pLVCD->clrText   = RGB(255,255,255);
                    pLVCD->clrTextBk = RGB(240,55,23);
                    return CDRF_NEWFONT;

                }
                case 1:
                {
                    pLVCD->clrText   = RGB(255,255,0);
                    pLVCD->clrTextBk = RGB(0,0,0);
                    return CDRF_NEWFONT;
                }
            }
        }
    }
    return CDRF_DODEFAULT;
}

想實現CustomDraw,但是我得到了一些奇怪的東西。我想知道為什么這個dwDrawStage值總是等於1

調試信息

hdr.code->NM_CUSTOMDRAW
dwDrawStage:1

感謝您分享智慧和經驗;

正如@Adrian Mole 所說,關鍵是關於返回值。

當我返回 CDRF_NEWFONT 或返回 CDRF_NOTIFYITEMDRAW 時,問題消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM