当前位置: 首页 > 图文教程 > 开发语言 > VC++ > VC学习笔记之一:怎样实现XP风格按钮

VC++
透明窗体的又一实现
橡皮区矩形 CRectTracker C# 实现
Visual Basic .NET 中多 Windows 窗体的同步
轻松实现类 MSDN 2002 界面(二)
轻松实现类 MSDN 2002 界面
数据库开发之窗体编程
一个打印报表的简单的类
SDK 程序使用SkinMagic工具包换皮肤
Windows SDK笔记(七):创建MDI窗口
Windows SDK笔记(六):使用对话框资源建立窗口
Windows SDK笔记(五):非模式对话框
Windows SDK笔记(四):模式对话框
也谈如何隐藏显示在任务栏中的对话框程序
一个托盘程序演示 -闹钟 Alert
think window procedure
再谈 CFileDialog 对话框的定制
获得 Win32 窗口句柄的更好的方法
个人考勤软件开发实例配套代码 2.1版(Update)
介绍一个操作DHTML表格的C++对象
Windows资源管理器Web视图界面

VC++ 中的 VC学习笔记之一:怎样实现XP风格按钮


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 90 ::
收藏到网摘: n/a

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

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