15,980
社区成员
发帖
与我相关
我的任务
分享
template<class T,class TBase = CButton,class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE CButtonXPImpl:
public CWindowImpl<T,TBase,TWinTraits>,
public CMouseHover<T>,
public COffscreenDraw<T>
{
public:
DECLARE_WND_SUPERCLASS(NULL,TBase::GetWndClassName())
BEGIN_MSG_MAP(CButtonXPImpl)
CHAIN_MSG_MAP( COffscreenDraw<T> )
MESSAGE_HANDLER(WM_CREATE,OnCreate);
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
MESSAGE_HANDLER(WM_LBUTTONUP, OnLButtonUp)
MESSAGE_HANDLER(WM_LBUTTONDBLCLK, OnRefresh)
MESSAGE_HANDLER(WM_KILLFOCUS, OnRefresh)
MESSAGE_HANDLER(WM_SETFOCUS, OnRefresh)
MESSAGE_HANDLER(WM_ENABLE, OnRefresh)
MESSAGE_HANDLER(BM_CLICK, OnStateChange)
MESSAGE_HANDLER(BM_SETSTYLE, OnStateChange)
MESSAGE_HANDLER(BM_SETSTATE, OnStateChange)
MESSAGE_HANDLER(WM_UPDATEUISTATE,OnRefresh)
MESSAGE_HANDLER(WM_SETTEXT,OnRefresh)
CHAIN_MSG_MAP( CMouseHover< T > )
DEFAULT_REFLECTION_HANDLER()
ALT_MSG_MAP(1)
END_MSG_MAP()
//.......
//.....
void DoPaint(CDCHandle dc)
{
//重载COffscreenDraw的DoPaint,一顿乱画..
}
//OnRefresh,OnStateChange这些函数就是Invalidate一下
}
// We need this style to prevent Windows from painting the button
ModifyStyle(0, BS_OWNERDRAW);