Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ta sekcja zawiera przykłady demonstrujące sposób implementowania niestandardowego rysowania.
Poniższy fragment kodu jest częścią procedury obsługi WM_NOTIFY, który ilustruje sposób obsługi niestandardowych powiadomień rysowania wysyłanych do kontrolki widoku listy.
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;
}
...
}
Pierwsze powiadomienie NM_CUSTOMDRAW ma członek dwDrawStage struktury NMCUSTOMDRAW ustawiony na CDDS_PREPAINT. Obsługujący zwraca CDRF_NOTIFYITEMDRAW, aby wskazać, że chce zmodyfikować jeden lub więcej elementów osobno.
Jeśli CDRF_NOTIFYITEMDRAW została zwrócona w poprzednim kroku, następne powiadomienie NM_CUSTOMDRAW ma dwDrawStage ustawione na CDDS_ITEMPREPAINT. Procedura obsługi pobiera aktualne wartości koloru i czcionki. Na tym etapie można określić nowe wartości dla małych ikon, dużych ikon i trybów listy. Jeśli kontrolka jest w trybie raportu, możesz również określić nowe wartości, które będą stosowane do wszystkich podwitryk elementu. Jeśli coś się zmieniło, wróć CDRF_NEWFONT. Jeśli kontrola jest w trybie raportu i chcesz zarządzać elementami podrzędnymi indywidualnie, zwróć CDRF_NOTIFYSUBITEMDRAW.
Ostateczne powiadomienie jest wysyłane tylko wtedy, gdy kontrolka jest w trybie raportu i zwróciłeś CDRF_NOTIFYSUBITEMDRAW w poprzednim kroku. Procedura zmieniania czcionek i kolorów jest taka sama jak w tym kroku, ale dotyczy tylko pojedynczego subitem. Zwróć CDRF_NEWFONT, aby powiadomić kontrolkę o zmianie koloru lub czcionki.