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