VC学习笔记之一:怎样实现XP风格按钮
作者: wanghero

示例代码运行效果图
在vc6下面怎样实现具有xp风格的按钮?我这里介绍一种简单的方法。 我们需要用到两个类,一个是CButtonST,另一个是CWinXpButtonST.这两个类一个是按钮类,另一个是Xp风格按钮类,大家可以从我的例子原代码中得到相关的4个文件(BtnST.h、BtnST.cpp、WinXPButtonST.h、WinXPButtonST.cpp)。
下面开始制作这个示例程序


和CWinXpButtonST。

"WinXPButtonSt.h"并加入成员 CWinXPButtonST m_OK;

ON_WM_CTLCOLOR ON_WN_INITDIALOG注意这个地方是CAboutDlg类,而不是默认的CXPDlgDlg类, 如下图:


m_OK.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);
m_OK.SetBkColor(RGB(162,189,252));
m_OK.SetRounded(TRUE);
m_OK.SetTooltipText(_T("关闭"));

if(nCtlColor==CTLCOLOR_LISTBOX)
{
//pDC-SetBkMode(TRANSPARENT);
pDC-SetTextColor(RGB(0,0,0));
pDC-SetBkColor(RGB(233,233,220));
HBRUSH b=CreateSolidBrush(RGB(233,233,220));
return b;
}
else if(nCtlColor==CTLCOLOR_SCROLLBAR)
{
//pDC-SetBkMode(TRANSPARENT);
pDC-SetTextColor(RGB(0,0,0));
pDC-SetBkColor(RGB(233,233,220));
HBRUSH b=CreateSolidBrush(RGB(233,233,220));
return b;
}
else if(nCtlColor==CTLCOLOR_EDIT)
{
//pDC-SetBkMode(TRANSPARENT);
pDC-SetTextColor(RGB(0,0,0));
pDC-SetBkColor(RGB(233,233,220));
HBRUSH b=CreateSolidBrush(RGB(233,233,220));
return b;
}
else if(nCtlColor==CTLCOLOR_STATIC)
{
pDC-SetTextColor(RGB(0,0,0));
pDC-SetBkColor(RGB(160,180,220));
HBRUSH b=CreateSolidBrush(RGB(160,180,220));
return b;
}
else if(nCtlColor==CTLCOLOR_DLG)
{
pDC-SetTextColor(RGB(0,0,0));
pDC-SetBkColor(RGB(160,180,220));
HBRUSH b=CreateSolidBrush(RGB(160,180,220));
return b;
}

DDX_Control(pDX, IDOK, m_OK);

并加入一个Button,双击这个Button,生成该按钮单击处理函数,在其中加入
CAboutDlg Dlg;
Dlg.DoModal();

这个程序所用到的类,是一个意大利人写的,还有其他不少功能,大家可以参照说明来使用,顺便提一句,这个类不能用作商业用途,如果需要的话,需要给作者支付5$.