VC界面美化,希望做出漂亮的按钮,毋庸置疑,首选CButtonST类。而美化按钮一般采用位图或图标的。
采用这种按钮,很多时候,我们希望按钮按下时能够变为另一种状态。比如说,我现在有一个播放按钮,未按下时为蓝色,按下之后变为灰色。
如下图所示
将两个图标导入,蓝色为icon1,灰色为icon2.
首先想到的方法是button.Enable(FALSE); 但是用这种方法出现的结果是按钮直接变灰,不再显示图片。如下图所示。
可见这种方法并不能实现我们期望的功能。
在button.Enable(FALSE);之后应该显示变灰的图标。
因此在上个语句之后跟button.SetIcon(IDI_ICON2),会发现,依然无法实现。
追根溯源,应该在CButtonST类中找原因。
如果按钮是导入到图标,对BtnST.cpp中的代码DrawItem函数,做简单的修改,如下:
// Draw the icon
if (m_csIcons[0].hIcon)
{
DrawTheIcon(pDC, !sTitle.IsEmpty(), &lpDIS->rcItem, &captionRect, m_bIsPressed, m_bIsDisabled);
}
改为
// Draw the icon
if (m_csIcons[0].hIcon)
{
DrawTheIcon(pDC, !sTitle.IsEmpty(), &lpDIS->rcItem, &captionRect, m_bIsPressed, FALSE/*m_bIsDisabled*/);
}
如果按钮是位图,同理,更改下一句的相应内容。
在按钮的对应代码中加入:
button.SetIcon(IDI_ICON2);
button.EnableWindow(FALSE);
效果如下图所示:
达到预期效果~ 相关范例程序请参考:http://download.csdn.net/detail/zj0789/6540317