Özel Çizim Kullanma
Bu bölüm, özel çizim uygulamayı gösteren örnekler içerir.
Aşağıdaki kod parçası, liste görünümü denetimine gönderilen özel çizim bildirimlerinin nasıl işleneceğini gösteren bir WM_NOTIFY işleyicisinin bir bölümüdür.
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;
}
...
}
İlk NM_CUSTOMDRAW bildiriminde, NMCUSTOMDRAW yapısının dwDrawStage üyesi CDDS_PREPAINTolarak ayarlanmıştır. İşleyici, bir veya daha fazla öğeyi tek tek değiştirmek istediği belirtmek için CDRF_NOTIFYITEMDRAW döndürür.
Önceki adımda CDRF_NOTIFYITEMDRAW döndürüldüyse, sonraki NM_CUSTOMDRAW bildiriminde dwDrawStageCDDS_ITEMPREPAINTolarak ayarlanmıştır. İşleyici geçerli rengi ve yazı tipi değerlerini alır. Bu noktada, küçük simge, büyük simge ve liste modları için yeni değerler belirtebilirsiniz. Denetim rapor modundaysa, öğenin tüm alt öğelerine uygulanacak yeni değerler de belirtebilirsiniz. Herhangi bir şeyi değiştirdiyseniz CDRF_NEWFONTdöndürebilirsiniz. Denetim rapor modundaysa ve alt öğeleri tek tek işlemek istiyorsanız CDRF_NOTIFYSUBITEMDRAWdöndürün.
Son bildirim yalnızca denetim rapor modundaysa ve önceki adımda CDRF_NOTIFYSUBITEMDRAW döndürdüyseniz gönderilir. Yazı tiplerini ve renkleri değiştirme yordamı bu adımla aynıdır, ancak yalnızca tek bir altite uygulanır. Rengin veya yazı tipinin değiştirilip değiştirilmediğini denetime bildirmek için CDRF_NEWFONT döndür.
İlgili konular
-
kavramsal
-
Diğer Kaynaklar