Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Esta seção contém exemplos que demonstram como implementar o desenho personalizado.
O fragmento de código a seguir é uma parte de um manipulador de WM_NOTIFY que ilustra como lidar com notificações de desenho personalizadas enviadas a um controle de exibição 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;
}
...
}
A primeira notificação NM_CUSTOMDRAW tem o membro dwDrawStage da estrutura NMCUSTOMDRAW definido como CDDS_PREPAINT. O manipulador retorna CDRF_NOTIFYITEMDRAW para indicar que deseja modificar um ou mais itens individualmente.
Se CDRF_NOTIFYITEMDRAW foi retornado na etapa anterior, a próxima notificação de NM_CUSTOMDRAW terá dwDrawStage definido como CDDS_ITEMPREPAINT. O manipulador recupera os valores de cor e fonte atuais. Neste ponto, você pode especificar novos valores para pequenos ícones, ícones grandes e modos de lista. Se o controle estiver no modo de relatório, você também poderá especificar novos valores que serão aplicados a todos os subitens do item. Se você tiver mudado alguma coisa, retorne CDRF_NEWFONT. Se o controle estiver no modo de relatório e você quiser manipular os subitem individualmente, retorne CDRF_NOTIFYSUBITEMDRAW.
A notificação final só será enviada se o controle estiver no modo de relatório e você retornar CDRF_NOTIFYSUBITEMDRAW na etapa anterior. O procedimento para alterar fontes e cores é o mesmo que essa etapa, mas só se aplica a um único subitem. Retorne CDRF_NEWFONT para notificar o controle se a cor ou fonte foi alterada.