滑动控件(CSliderCtrl)的自绘是通过响应 NM_CUSTOMDRAW 消息,其响应函数将获得两个参数
void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
其中,
1.pResult指针将传递给控件的父窗口;
2.pHMHDR指针指向了一个NMCUSTOMDRAW结构,该结构定义如下:
typedef struct tagNMCUSTOMDRAWINFO
{
NMHDR hdr;//含有通知信息的NMHDR结构;
DWORD dwDrawStage; //目前绘制的步骤;
HDC hdc; //设备上下文句柄;
RECT rc; //绘制的区域;
DWORD dwItemSpec; //绘制项目条的说明;
UINT uItemState;//当前项目条的状态
LPARAM lItemlParam;//应用程序规定的数据;
}
NMCUSTOMDRAW, FAR * LPNMCUSTOMDRAW;
在消息处理函数中,
1.通过pNMHDR的成员dwDrawStage可以知道目前的绘制步骤,其值如下
CDDS_PREPAINT 准备开始绘制循环
CDDS_POSTERASE 擦除循环结束
CDDS_PREERASE 准备开始擦除循环
CDDS_POSTPAINT 绘制循环结束
CDDS_ITEM 指定dwItemSpec,uItemState,lItemlParam参数有效
CDDS_ITEMPREPAINT 准备开始列表项绘制
CDDS_ITEMPOSTPAINT 列表项绘制结束
CDDS_ITEMPREERASE 列表项准备开始列表项擦除
CDDS_ITEMPOSTERASE 列表项擦除结束
CDDS_SUBITEM 指定列表子项
2.通过dwItemSpe可以知道目前绘制项目条的说明,其值如下:
TBCD_TICS: 刻度(MSDN:Identifies the increment tick marks that appear along the edge of the trackbar control. )
TBCD_THUMB: 滑动块(MSDN:Identifies the trackbar control's thumb marker. This is the portion of the control that the user moves. )
TBCD_CHANNEL: 滑动轨道(NSDN:Identifies the channel that the trackbar control's thumb marker slides along. )
3.通过uItemState可以知道目前列表项的状态,其值如下:
CDIS_SELECTED 选中状态
CDIS_GRAYED 灰化状态
CDIS_DISABLED 禁止状态
CDIS_CHECKED 标记状态
CDIS_FOCUS 焦点状态
CDIS_DEFAULT 默认状态
CDIS_HOT 热点状态
CDIS_MARKED 标注状态
CDIS_INDETERMINATE 不定状态
4.返回值
自定义绘制返回标志
自定义绘制返回标志
含义
CDRF_DODEFAULT
指示控件自行绘制。该值为默认值,不应该将它与其他值组合在一起。
CDRF_SKIPDEFAULT
用于指定控件根本不进行任何绘制。
CDRF_NEWFONT
当代码更改绘制项/子项的字体时使用。
CDRF_NOTIFYPOSTPAINT
使通知信息在控件或每个项/子项绘制后发送。
CDRF_NOTIFYITEMDRAW
指出项(或子项)将进行绘制。注意,它下面的值与 CDRF_NOTIFYSUBITEMDRAW 相同。
CDRF_NOTIFYSUBITEMDRAW
指出子项(或项)将进行绘制。注意,它下面的值与 CDRF_NOTIFYITEMDRAW 相同。
CDRF_NOTIFYPOSTERASE
当删除控件后需要通知代码时使用。