Condividi tramite


Utilizzo di un disegno personalizzato

Questa sezione contiene esempi che illustrano come implementare un disegno personalizzato.

Il seguente frammento di codice è parte di un gestore di notifiche WM_NOTIFY che mostra come gestire le notifiche di disegno personalizzato inviate a un controllo list-view.

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

La prima notifica NM_CUSTOMDRAW ha il membro dwDrawStage della strutturaNMCUSTOMDRAW impostata su CDDS_PREPAINT. Il gestore restituisce CDRF_NOTIFYITEMDRAW per indicare che desidera modificare uno o più elementi singolarmente.

Se CDRF_NOTIFYITEMDRAW è stato restituito nel passaggio precedente, la notifica successiva NM_CUSTOMDRAW ha dwDrawStage impostata su CDDS_ITEMPREPAINT. Il gestore recupera i valori di colore e carattere correnti. A questo punto, è possibile specificare nuovi valori per le modalità icona piccola, icona grande e elenco. Se il controllo è in modalità report, è anche possibile specificare nuovi valori che verranno applicati a tutti gli elementi secondari dell'elemento. Se sono stati modificati elementi, restituire CDRF_NEWFONT. Se il controllo è in modalità report e si desidera gestire singolarmente gli elementi secondari, restituire CDRF_NOTIFYSUBITEMDRAW.

La notifica finale viene inviata solo se il controllo è in modalità report e viene restituito CDRF_NOTIFYSUBITEMDRAW nel passaggio precedente. La procedura per la modifica di tipi di carattere e colori è identica a quella di quel passaggio, ma si applica solo a un singolo elemento secondario. Restituisce CDRF_NEWFONT per notificare al controllo se il colore o il tipo di carattere è stato modificato.

concettuale

Informazioni sul Disegno personalizzato

Riferimento di disegno personalizzato

altre risorse

ESEMPIO : CustDTv illustra un disegno personalizzato in un TreeView (Q248496)