Megosztás:


Egyéni rajz használata

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.

Koncepcionális