当只绘制“有用的内容”时,我们使用了所谓的所有者绘制的项目。但在我们的例子中,要从头开始绘制整个项目,我们需要 MS 通用控件中提供的通用自定义绘图技术。这意味着我们应该处理 NM_CUSTOMDRAW 通知消息。
这是一个来自真实工作代码的示例(控件父级的 WindowProc):
Select Case uMsg
Case WM_NOTIFY
CopyMemory tNMH, ByVal lParam, LenB(tNMH)
Select Case tNMH.Code
Case NM_CUSTOMDRAW
Dim tNMCD As NMCUSTOMDRAW
CopyMemory tNMCD, ByVal lParam, Len(tNMCD)
Select Case tNMCD.dwDrawStage
Case CDDS_PREPAINT
WindowProcParent = CDRF_NOTIFYITEMDRAW Or CDRF_NOTIFYPOSTPAINT ' CDDS_ITEMPREPAINT (below) will be raised for every item
Exit Function
Case CDDS_ITEMPREPAINT
pDrawItem tNMCD
WindowProcParent = CDRF_SKIPDEFAULT ' totally draw the column header by ourselves
Exit Function
Case CDDS_POSTPAINT
pPostPaint
Exit Function
End Select