Delen via


Aangepast tekenen gebruiken

Deze sectie bevat voorbeelden die laten zien hoe u aangepaste tekenen implementeert.

Het volgende codefragment is een gedeelte van een WM_NOTIFY handler die laat zien hoe u aangepaste tekenmeldingen verwerkt die naar een besturingselement voor de lijstweergave worden verzonden.

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;
    }
...
}

De eerste NM_CUSTOMDRAW melding heeft het dwDrawStage-lid van de NMCUSTOMDRAW-structuur ingesteld op CDDS_PREPAINT. De handler retourneert CDRF_NOTIFYITEMDRAW om aan te geven dat het een of meer items afzonderlijk wil wijzigen.

Als CDRF_NOTIFYITEMDRAW is geretourneerd in de vorige stap, is dwDrawStage ingesteld op NM_CUSTOMDRAW volgende CDDS_ITEMPREPAINT. De handler haalt de huidige kleur- en lettertypewaarden op. Op dit moment kunt u nieuwe waarden opgeven voor kleine pictogrammen, grote pictogrammen en lijstmodi. Als het besturingselement zich in de rapportmodus bevindt, kunt u ook nieuwe waarden opgeven die van toepassing zijn op alle subitems van het item. Als u iets hebt gewijzigd, retourneer dan CDRF_NEWFONT. Als het besturingselement zich in de rapportmodus bevindt en u de subitems afzonderlijk wilt verwerken, retourneert u CDRF_NOTIFYSUBITEMDRAW.

De laatste melding wordt alleen verzonden als het besturingselement zich in de rapportmodus bevindt en u CDRF_NOTIFYSUBITEMDRAW in de vorige stap hebt geretourneerd. De procedure voor het wijzigen van lettertypen en kleuren is hetzelfde als die stap, maar is alleen van toepassing op één subitem. Retourneer CDRF_NEWFONT om het besturingselement op de hoogte te stellen als de kleur of het lettertype is gewijzigd.

Conceptueel