사용자 지정 그리기 사용

이 섹션에는 사용자 지정 그리기를 구현하는 방법을 보여 주는 예가 포함되어 있습니다.

다음 코드 조각은 목록 뷰 컨트롤로 전송된 사용자 지정 그리기 알림을 처리하는 방법을 보여 주는 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 알림에는 dwDrawStageCDDS_ITEMPREPAINT로 설정됩니다. 처리기는 현재 색 및 글꼴 값을 검색합니다. 이 시점에서 작은 아이콘, 큰 아이콘 및 목록 모드에 대한 새 값을 지정할 수 있습니다. 컨트롤이 보고서 모드에 있는 경우 항목의 모든 하위 항목에 적용할 새 값을 지정할 수도 있습니다. 변경한 것이 있으면 CDRF_NEWFONT를 반환합니다. 컨트롤이 보고서 모드에 있고 하위 항목을 개별적으로 처리하려는 경우 CDRF_NOTIFYSUBITEMDRAW를 반환합니다.

최종 알림은 컨트롤이 보고서 모드에 있고 이전 단계에서 CDRF_NOTIFYSUBITEMDRAW를 반환한 경우에만 전송됩니다. 글꼴 및 색을 변경하는 프로시저는 해당 단계와 동일하지만 단일 하위 항목에만 적용됩니다. CDRF_NEWFONT를 반환하여 색이나 글꼴이 변경된 경우 컨트롤에 알립니다.

개념

사용자 지정 그리기 정보

사용자 지정 그리기 참조

기타 리소스

샘플: CustDTv는 TreeView에서 사용자 지정 그리기를 보여 줍니다(Q248496).