Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette section contient des exemples qui montrent comment implémenter un dessin personnalisé.
Le fragment de code suivant est une partie d’un gestionnaire WM_NOTIFY qui montre comment gérer les notifications de dessin personnalisées envoyées à un contrôle d’affichage de liste.
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éfinie 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 défini dwDrawStage sur CDDS_ITEMPREPAINT. Le gestionnaire récupère les valeurs de couleur et de police actuelles. À ce stade, vous pouvez spécifier de nouvelles valeurs pour les petites icônes, les grandes icônes et les modes de 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 changé 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 s’applique uniquement à un sous-élément unique. Retournez CDRF_NEWFONT pour notifier le contrôle si la couleur ou la police a été modifiée.
Rubriques connexes
Conceptuel
- À propos du de dessin personnalisé
- Informations de référence sur les dessins personnalisés