Partager via


Utilisation du dessin personnalisé

Cette section contient des exemples qui montrent comment implémenter un dessin personnalisé.

Le fragment de code suivant est une partie d’un gestionnaire de WM_NOTIFY qui illustre comment gérer les notifications de dessin personnalisées envoyées à un contrôle 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 première notification NM_CUSTOMDRAW a le membre dwDrawStage de la structure NMCUSTOMDRAW défini sur CDDS_PREPAINT. Le gestionnaire retourne CDRF_NOTIFYITEMDRAW pour indiquer qu’il souhaite modifier un ou plusieurs éléments individuellement.

Si CDRF_NOTIFYITEMDRAW a été retourné à l’étape précédente, la notification NM_CUSTOMDRAW suivante a dwDrawStage définie sur CDDS_ITEMPREPAINT. Le gestionnaire récupère les valeurs de police et de couleur actuelles. À ce stade, vous pouvez spécifier de nouvelles valeurs pour les modes petite icône, grande icône et liste. Si le contrôle est en mode rapport, vous pouvez également spécifier de nouvelles valeurs qui s’appliqueront à tous les sous-éléments de l’élément. Si vous avez modifié quoi que ce soit, retournez CDRF_NEWFONT. Si le contrôle est en mode rapport et que vous souhaitez gérer les sous-éléments individuellement, retournez CDRF_NOTIFYSUBITEMDRAW.

La notification finale est envoyée uniquement si le contrôle est en mode rapport et que vous avez retourné CDRF_NOTIFYSUBITEMDRAW à l’étape précédente. La procédure de modification des polices et des couleurs est la même que cette étape, mais elle ne s’applique qu’à un seul sous-élément. Retournez CDRF_NEWFONT pour informer le contrôle si la couleur ou la police a été modifiée.

Conceptuel

À propos du dessin personnalisé

Informations de référence sur le dessin personnalisé

Autres ressources

EXEMPLE : CustDTv illustre le dessin personnalisé dans un TreeView (Q248496)