Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Esta sección contiene ejemplos que muestran cómo implementar el dibujo personalizado.
El fragmento de código siguiente es una parte de un controlador de WM_NOTIFY que muestra cómo controlar las notificaciones de dibujo personalizadas enviadas a un control de vista de lista.
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 primera notificación NM_CUSTOMDRAW tiene el miembro dwDrawStage de la estructura NMCUSTOMDRAW establecida en CDDS_PREPAINT. El controlador devuelve CDRF_NOTIFYITEMDRAW para indicar que desea modificar uno o varios elementos individualmente.
Si CDRF_NOTIFYITEMDRAW se devolvió en el paso anterior, la siguiente notificación de NM_CUSTOMDRAW tiene dwDrawStage establecido en CDDS_ITEMPREPAINT. El controlador recupera los valores de color y fuente actuales. En este punto, puede especificar nuevos valores para los modos de icono pequeño, icono grande y lista. Si el control está en modo de informe, también puede especificar nuevos valores que se aplicarán a todos los subelementos del elemento. Si ha cambiado algo, devuelva CDRF_NEWFONT. Si el control está en modo de informe y desea controlar los subelementos individualmente, devuelva CDRF_NOTIFYSUBITEMDRAW.
La notificación final solo se envía si el control está en modo de informe y devolvió CDRF_NOTIFYSUBITEMDRAW en el paso anterior. El procedimiento para cambiar fuentes y colores es el mismo que ese paso, pero solo se aplica a un único subelemento. Devuelve CDRF_NEWFONT para notificar al control si se cambió el color o la fuente.
Temas relacionados
Conceptual
- Acerca de los de dibujo personalizados
- Referencia de dibujo personalizada