Bagikan melalui


Menggunakan Gambar Kustom

Bagian ini berisi contoh yang menunjukkan cara menerapkan gambar kustom.

Fragmen kode berikut adalah bagian dari handler WM_NOTIFY yang menggambarkan cara menangani pemberitahuan gambar kustom yang dikirim ke kontrol tampilan daftar.

        
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;    
    }
...
}
        

Pemberitahuan NM_CUSTOMDRAW pertama memiliki anggota dwDrawStage dari struktur NMCUSTOMDRAW yang diatur ke CDDS_PREPAINT. Handler mengembalikan CDRF_NOTIFYITEMDRAW untuk menunjukkan bahwa ia ingin memodifikasi satu atau beberapa item satu per satu.

Jika CDRF_NOTIFYITEMDRAW dikembalikan pada langkah sebelumnya, pemberitahuan NM_CUSTOMDRAW berikutnya memiliki dwDrawStage yang diatur ke CDDS_ITEMPREPAINT. Handler mengambil nilai warna dan font saat ini. Pada titik ini, Anda dapat menentukan nilai baru untuk ikon kecil, ikon besar, dan mode daftar. Jika kontrol dalam mode laporan, Anda juga dapat menentukan nilai baru yang akan berlaku untuk semua subitem item. Jika Anda telah mengubah apa pun, kembalikan CDRF_NEWFONT. Jika kontrol dalam mode laporan dan Anda ingin menangani subitem satu per satu, kembalikan CDRF_NOTIFYSUBITEMDRAW.

Pemberitahuan akhir hanya dikirim jika kontrol dalam mode laporan dan Anda mengembalikan CDRF_NOTIFYSUBITEMDRAW di langkah sebelumnya. Prosedur untuk mengubah font dan warna sama dengan langkah tersebut, tetapi hanya berlaku untuk satu subitem. Kembalikan CDRF_NEWFONT untuk memberi tahu kontrol jika warna atau font diubah.

Konseptual

Tentang Gambar Kustom

Referensi Gambar Kustom

Sumber Daya Lainnya

SAMPEL: CustDTv Mengilustrasikan Gambar Kustom dalam TreeView (Q248496)