Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Ez a szakasz példákat tartalmaz, amelyek bemutatják, hogyan implementálható az egyéni rajz.
Az alábbi kódrészlet egy WM_NOTIFY kezelő része, amely bemutatja, hogyan kezelhetők a listanézet-vezérlőknek küldött egyéni rajzértesítések.
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;
}
...
}
Az első NM_CUSTOMDRAW értesítés NMCUSTOMDRAW struktúrájának dwDrawStage tagját CDDS_PREPAINTértékkel állítja be. A kezelő CDRF_NOTIFYITEMDRAW ad vissza, amely jelzi, hogy egyenként szeretne módosítani egy vagy több elemet.
Ha az előző lépésben CDRF_NOTIFYITEMDRAW lett visszaadva, a következő NM_CUSTOMDRAW értesítés dwDrawStageCDDS_ITEMPREPAINTértékre van állítva. A kezelő lekéri az aktuális szín- és betűtípusértékeket. Ezen a ponton új értékeket adhat meg a kis ikonokhoz, a nagy ikonokhoz és a listamódokhoz. Ha a vezérlőelem jelentés módban van, az elem összes alelemére vonatkozó új értékeket is megadhat. Ha módosított valamit, adja vissza CDRF_NEWFONT. Ha a vezérlőelem jelentés módban van, és egyenként szeretné kezelni az alelemeket, térjen vissza CDRF_NOTIFYSUBITEMDRAW.
A végső értesítést csak akkor küldik el, ha a vezérlő jelentés módban van, és az előző lépésben a CDRF_NOTIFYSUBITEMDRAW értéket adtad vissza. A betűtípusok és színek módosításának eljárása megegyezik az adott lépéssel, de csak egyetlen részhalmazra vonatkozik. Adja vissza a CDRF_NEWFONT a vezérlőelem értesítéséhez, ha a szín vagy a betűtípus megváltozott.