VC学习笔记之一:怎样实现XP风格按钮
作者: wanghero
下载本文示例源代码
示例代码运行效果图
在vc6下面怎样实现具有xp风格的按钮?我这里介绍一种简单的方法。 我们需要用到两个类,一个是CButtonST,另一个是CWinXpButtonST.这两个类一个是按钮类,另一个是Xp风格按钮类,大家可以从我的例子原代码中得到相关的4个文件(BtnST.h、BtnST.cpp、WinXPButtonST.h、WinXPButtonST.cpp)。
下面开始制作这个示例程序
1、使用vc的向导制作一个工程dialog工程,起名为:XPDlg。并接受一切默认值。
2、将我上面提到的4个文件copy到你的工程所在的目录。打开FileView将4个文件加入到你的工程中去。查看ClassView增加了2个类,CButtonSt 和CWinXpButtonST。
3、在CAboutDlg类中加入#include "WinXPButtonSt.h"并加入成员 CWinXPButtonST m_OK;
4、使用MFC 类向导在类CAboutDlg中,加入2个函数 ON_WM_CTLCOLOR ON_WN_INITDIALOG注意这个地方是CAboutDlg类,而不是默认的CXPDlgDlg类, 如下图:
5、在OnInitDialog中加入如下代码:
m_OK.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30); m_OK.SetBkColor(RGB(162,189,252)); m_OK.SetRounded(TRUE); m_OK.SetTooltipText(_T("关闭"));6、在CAboutDlg::OnCtlColor中加入如下代码:
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; }7、在CAboutDlg::DoDataExchange中加入如下代码:
DDX_Control(pDX, IDOK, m_OK);8、打开Dialog对话框IDD_XPDLG_DIALOG 并加入一个Button,双击这个Button,生成该按钮单击处理函数,在其中加入
CAboutDlg Dlg; Dlg.DoModal();9、运行Ctrl+F7