共用方式為


使用自定義繪製

本節包含示範如何實作自定義繪製的範例。

下列代碼段是WM_NOTIFY處理程式的一部分,說明如何處理傳送至清單檢視控件的自定義繪製通知。

        
LPNMLISTVIEW  pnm  = (LPNMLISTVIEW)lParam;

switch (pnm->hdr.code){
...
case NM_CUSTOMDRAW:

    LPNMLVCUSTOMDRAW  lplvcd = (LPNMLVCUSTOMDRAW)lParam;

    switch(lplvcd->nmcd.dwDrawStage) {

    case CDDS_PREPAINT :
        return CDRF_NOTIFYITEMDRAW;

    case CDDS_ITEMPREPAINT:
        SelectObject(lplvcd->nmcd.hdc,
                     GetFontForItem(lplvcd->nmcd.dwItemSpec,
                                    lplvcd->nmcd.lItemlParam) );
        lplvcd->clrText = GetColorForItem(lplvcd->nmcd.dwItemSpec,
                                          lplvcd->nmcd.lItemlParam);
        lplvcd->clrTextBk = GetBkColorForItem(lplvcd->nmcd.dwItemSpec,
                                              lplvcd->nmcd.lItemlParam);

/* At this point, you can change the background colors for the item
and any subitems and return CDRF_NEWFONT. If the list-view control
is in report mode, you can simply return CDRF_NOTIFYSUBITEMDRAW
to customize the item's subitems individually */
        ...

        return CDRF_NEWFONT;
    //  or return CDRF_NOTIFYSUBITEMDRAW;

    case CDDS_SUBITEM | CDDS_ITEMPREPAINT:
        SelectObject(lplvcd->nmcd.hdc,
                     GetFontForSubItem(lplvcd->nmcd.dwItemSpec,
                                       lplvcd->nmcd.lItemlParam,
                                       lplvcd->iSubItem));
        lplvcd->clrText = GetColorForSubItem(lplvcd->nmcd.dwItemSpec,
                                             lplvcd->nmcd.lItemlParam,
                                             lplvcd->iSubItem));
        lplvcd->clrTextBk = GetBkColorForSubItem(lplvcd->nmcd.dwItemSpec,
                                                 lplvcd->nmcd.lItemlParam,
                                                 lplvcd->iSubItem));

/* This notification is received only if you are in report mode and
returned CDRF_NOTIFYSUBITEMDRAW in the previous step. At
this point, you can change the background colors for the
subitem and return CDRF_NEWFONT.*/
        ...
        return CDRF_NEWFONT;    
    }
...
}
        

第一個NM_CUSTOMDRAW通知的 dwDrawStage 成員的 NMCUSTOMDRAW 結構設定為 CDDS_PREPAINT。 處理程式會傳 回CDRF_NOTIFYITEMDRAW ,指出它想要個別修改一或多個專案。

如果在上一個步驟中傳回CDRF_NOTIFYITEMDRAW,下一個NM_CUSTOMDRAW通知會將 dwDrawStage 設定為 CDDS_ITEMPREPAINT。 處理程式會擷取目前的色彩和字型值。 此時,您可以指定小型圖示、大型圖示和清單模式的新值。 如果控件處於報表模式,您也可以指定套用至專案所有子專案的新值。 如果您已變更任何專案,請傳回 CDRF_NEWFONT。 如果控件處於報表模式,而且您想要個別處理子專案,請傳回 CDRF_NOTIFYSUBITEMDRAW

只有在控件處於報表模式,且您在上一個步驟中傳回 CDRF_NOTIFYSUBITEMDRAW 時,才會傳送最終通知。 變更字型和色彩的程式與此步驟相同,但只適用於單一子專案。 傳回 CDRF_NEWFONT ,以在色彩或字型變更時通知控件。

概念

關於自定義繪製

自訂繪製參考

其他資源

範例:CustDTv 說明樹檢視中的自訂繪製 (Q248496)