真心求教,WTL如何给按钮控件添加?

实现方法:

1. 首先继承CButton模板类及CCustomDraw的模板类。

2. 在消息泵中,将CButton的自绘消息,加入至CCustomDraw消息链中,那样你就可以收到两个自绘通知了,他们是OnPreErase和OnPrePaint。

这两个自绘通知,会以函数的形式通知你,类似于虚函数:

我们会在OnPreErase里,执行自绘操作,所以返回CDRF_SKIPDEFAULT,以让窗口跳过默认自绘。

3. 在OnPreErase里,我们需要获取按钮的四种状态:正常、热点、选中和禁用。默认是正常状态,所以我们只用处理:热点、选中和禁用。OnPreErase也会返回自绘的HDC图形描绘句柄,这也是我们需要用到的。

4. 判断当前按钮状态时需要注意:热点和选中这两个状态。当鼠标选中了按钮,那么按钮会返回CDIS_SELECTED的状态给你,但由于鼠标这时还停留在按钮上面,那么反馈的状态里面也包含了CDIS_HOT在里面。