关于按钮重绘的有关问题,本人水平有限,请大家指点

关于按钮重绘的问题,本人水平有限,请大家指点
各位,如果实现当鼠标移动到按钮时顔色改变,移走时又恢复原来的样子,这要用到按钮重绘,就是OWER_DRAW,是不是每一个按钮都要关联变量?但如果有几十个按钮都要实现这种功能,那不是要关联几十个变量?各位有什么解决方法,或者有更好的方法,麻烦说一下,谢谢了

------解决方案--------------------
如果所有按钮 ‘实现当鼠标移动到按钮时’都改变为同一种顔色,移走时又恢复原来的样子。那么这是类的特性,可以改变类的方法。
如果每个按钮要不同的‘到按钮’颜色,那是‘实例’的特性,需要类按实例(找到这个实例)处理。
------解决方案--------------------
网上有已写好的类CButtonST,符合LZ的要求,去搜一下下载使用即可
------解决方案--------------------
仿照QQ登陆时的登陆按钮。
楼主说按钮很多,可以这么做,关联还是要的。
UINT butt_id[20]; //记录按钮ID
CButtonEx butt[20]; //用作关联
在DDX中写循环for(int i=0; i<20; i++) DDX...
重写有两种方式,一是ownerdraw,响应DrawItem消息,重写DrawItem。而是响应PAINT消息,重写OnPaint。
代码:
ButtonEx.h
C/C++ code

#pragma once

// CButtonEx

class CButtonEx : public CButton
{
private:
    bool down;
    int on;
    CString cap;
public:
    CButtonEx();
    void SetText(CString);
protected:
    DECLARE_MESSAGE_MAP()
public:
    afx_msg LRESULT OnMouseHover(WPARAM,LPARAM);
    afx_msg LRESULT OnMouseLeave(WPARAM,LPARAM);
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    afx_msg void OnTimer(UINT_PTR nIDEvent);
    afx_msg void OnPaint();
};

------解决方案--------------------
那么就动态创建