在学习孙鑫老师的vc++深入详解一书第十章 10.6.4 改变按钮控件的背景色及文本颜色 一节中讲到用CButtonST类来实现的方法,书中用到CButtonST类的子函数
m_btnST.SetActiveBgColor(RGB(0,0,255));
m_btnST.SetActiveFgColor(RGB(255,0,0));
m_btnST.SetInactiveBgColor(RGB(0,0,255));
m_btnST.SetInactiveFgColor(RGB(255,0,0));
但是在我下载到新版的CButtonST类的BtnST.cpp中没有这个函数
在此新版的CButtonST类实现改变按钮控件的背景色及文本颜色用如下函数
m_btnST.SetColor(CButtonST::BTNST_COLOR_BK_IN, RGB(0,0,255));
m_btnST.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(255,0,0));
m_btnST.SetColor(CButtonST::BTNST_COLOR_BK_OUT, RGB(255,0,255));
m_btnST.SetColor(CButtonST::BTNST_COLOR_FG_OUT, RGB(255,255,0));
m_btnST.SetColor(CButtonST::BTNST_COLOR_BK_FOCUS, RGB(0,255,255));
提示:SetColor函数的第一个参数表示按钮的各个状态,前景色就是文字的颜色,它们的取值表示:BTNST_COLOR_BK_IN //鼠标放在按钮内时的背景色
BTNST_COLOR_FG_IN, //鼠标放在按钮内时的前景色
BTNST_COLOR_BK_OUT, //普通状态时的背景色
BTNST_COLOR_FG_OUT, //普通状态时的前景色
BTNST_COLOR_BK_FOCUS, //按钮被按下后的背景色
BTNST_COLOR_FG_FOCUS, //按钮被按下后的前景色
另外,在调试过程中遇到如下警告:
多次子类化造成Debug Assertion Failed! wincore.cpp Line: 320
原因是在语句m_btnST.SubclassDlgItem(IDC_BTN_ST,this);造成了m_btnST的重复子类化将这句注释掉就可以了。
运行结果:三张图的按钮ButtonST,不同颜色分别为普通状态下颜色,鼠标移动上面的颜色以及鼠标按下后显示的颜色