使用自定义绘图
本节包含演示如何实现自定义绘制的示例。
以下代码片段是 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,以通知控件是否更改了颜色或字体。
相关主题
-
Conceptual
-
其他资源