许多控件都可以收到NM_CUSTOMDRAW消息,但结构却不完全相同。
Control | Custom Draw Structure |
Rebar, trackbar, and header | NMCUSTOMDRAW |
List view | NMLVCUSTOMDRAW |
Tooltip | NMTTCUSTOMDRAW |
Tree view | NMTVCUSTOMDRAW |
Toolbar | NMTBCUSTOMDRAW |
typedef struct tagNMCUSTOMDRAWINFO { NMHDR hdr; //NMHDR结构包含关于此通知的代码信息。这个结构变量跟OnCustomDraw函数的第一个参数pNMHDR是一样的. DWORD dwDrawStage; //绘画段,某项被檫出前、后,绘制前、后。这个要着重了解,后面介绍,篇幅较大 HDC hdc; //控件的设备上下文句柄 RECT rc; //要绘制的区域,大小,一般是一个项的区域,如果是大循环则是整个控件的大小。 DWORD_PTR dwItemSpec; //项索引,依据控件而来(如CListCtrl),树控件不需要这个变量 UINT uItemState; //项的状态,详见后面 LPARAM lItemlParam; //项关联的数据,通过SetItemData函数设置的。 } NMCUSTOMDRAW, *LPNMCUSTOMDRAW;
先来看看关于dwDrawState在MSDN的取值: dwDrawStage成员可以有以下值: CDDS_POSTERASE:清除循环完成后 CDDS_POSTPAINT:绘制循环完成后