사용자 지정 그리기 사용
이 섹션에는 사용자 지정 그리기를 구현하는 방법을 보여 주는 예가 포함되어 있습니다.
다음 코드 조각은 목록 뷰 컨트롤로 전송된 사용자 지정 그리기 알림을 처리하는 방법을 보여 주는 WM_NOTIFY 처리기의 일부입니다.
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;
}
...
}
첫 번째 NM_CUSTOMDRAW 알림에는 CDDS_PREPAINT로 설정된 NMCUSTOMDRAW 구조체의 dwDrawStage 멤버가 있습니다. 처리기는 CDRF_NOTIFYITEMDRAW를 반환하여 하나 이상의 항목을 개별적으로 수정하려고 함을 나타냅니다.
이전 단계에서 CDRF_NOTIFYITEMDRAW가 반환된 경우 다음 NM_CUSTOMDRAW 알림에는 dwDrawStage가 CDDS_ITEMPREPAINT로 설정됩니다. 처리기는 현재 색 및 글꼴 값을 검색합니다. 이 시점에서 작은 아이콘, 큰 아이콘 및 목록 모드에 대한 새 값을 지정할 수 있습니다. 컨트롤이 보고서 모드에 있는 경우 항목의 모든 하위 항목에 적용할 새 값을 지정할 수도 있습니다. 변경한 것이 있으면 CDRF_NEWFONT를 반환합니다. 컨트롤이 보고서 모드에 있고 하위 항목을 개별적으로 처리하려는 경우 CDRF_NOTIFYSUBITEMDRAW를 반환합니다.
최종 알림은 컨트롤이 보고서 모드에 있고 이전 단계에서 CDRF_NOTIFYSUBITEMDRAW를 반환한 경우에만 전송됩니다. 글꼴 및 색을 변경하는 프로시저는 해당 단계와 동일하지만 단일 하위 항목에만 적용됩니다. CDRF_NEWFONT를 반환하여 색이나 글꼴이 변경된 경우 컨트롤에 알립니다.
관련 항목