// DazzleButton.cpp : implementation file
//
#include "stdafx.h"
#include "Button.h"
#include "DazzleButton.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/*****************************************************************************/
// 函数说明: 类初始化
/*****************************************************************************/
CDazzleButton::CDazzleButton()
{
m_fgTracking = FALSE;
m_nStyle = DEFAULT_STYLE;
m_colBackGround = GetSysColor(COLOR_BTNFACE);
m_colText = GetSysColor(COLOR_BTNTEXT);
m_hIcon = NULL;
}
/*****************************************************************************/
// 函数说明: 类销毁
/*****************************************************************************/
CDazzleButton::~CDazzleButton()
{
if(m_font.m_hObject != NULL) m_font.DeleteObject(); //删除字体
if(m_bitmap.m_hObject != NULL) m_bitmap.DeleteObject();
if(m_hIcon != NULL) DestroyIcon(m_hIcon);
}
/*****************************************************************************/
// 消息映射
/*****************************************************************************/
BEGIN_MESSAGE_MAP(CDazzleButton, CButton)
//{{AFX_MSG_MAP(CDazzleButton)
ON_WM_MOUSEMOVE()
ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/*****************************************************************************/
// 函数说明: 按钮风格设置
/*****************************************************************************/
void CDazzleButton::SetStyle(UINT nStyle)
{
if((nStyle<STYLE_MAX)&&(nStyle != m_nStyle))
{
m_nStyle = nStyle;
Invalidate(FALSE); //重绘窗口
}
}
/*****************************************************************************/
// 函数说明: 按钮颜色设置
// 入口参数: colBackGround = 背景色 COLORREF =文字颜色
/*****************************************************************************/
void CDazzleButton::SetColor(COLORREF colBackGround, COLORREF colText)
{
m_colBackGround = colBackGround;
m_colText = colText;
Invalidate(FALSE); //重绘窗口
}
/*****************************************************************************/
// 函数说明: 按钮字体设置
// 入口参数: szFont = 字体名 nSize =文字大小
/*****************************************************************************/
void CDazzleButton::SetFont(LPCTSTR szFont, UINT nSize)
{
LOGFONT lgFont;
if(m_font.m_hObject != NULL) m_font.DeleteObject();
// m_font.CreatePointFont(nSize*10, szFont); //简单方式创建新字体
//字体参数
lstrcpy(lgFont.lfFaceName, szFont); //字体
lgFont.lfHeight = nSize&0x00ff; //高度
lgFont.lfEscapement = 0; //文本倾斜度,逆时针方向为正,一圈总角度为3600
lgFont.lfOrientation = 0; //字符倾斜角度
if(nSize&FONT_HEAVY)
lgFont.lfWeight = FW_HEAVY; //粗体
else if(nSize&FONT_BOLD)
lgFont.lfWeight = FW_BOLD; //粗体
else
lgFont.lfWeight = FW_MEDIUM; //正常
if(nSize&FONT_ITALIC)
lgFont.lfItalic = TRUE; //斜体
else
lgFont.lfItalic = FALSE; //正常
if(nSize&FONT_UNDERLINE)
lgFont.lfUnderline = TRUE; //加下划线
else
lgFont.lfUnderline = FALSE; //无下划线
lgFont.lfStrikeOut = 0; //是否加删除线
lgFont.lfCharSet = DEFAULT_CHARSET;
lgFont.lfOutPrecision = OUT_DEFAULT_PRECIS; //输出、输入精度
lgFont.lfClipPrecision = CLIP_DEFAULT_PRECIS; //剪辑精度
lgFont.lfQuality = DEFAULT_QUALITY; //设置输出质量
lgFont.lfPitchAndFamily = DEFAULT_PITCH|FF_SWISS; //字间距
//建立字体
m_font.CreateFontIndirect(&lgFont);
}
/*****************************************************************************/
// 函数说明: 按钮图标设置
// 入口参数: nIDResource = 图标资源ID
/*****************************************************************************/
void CDazzleButton::SetIcon(UINT nIDResource)
{
m_hIcon = AfxGetApp()->LoadIcon(nIDResource);
}
/*****************************************************************************/
// 函数说明: 按钮图片设置
// 入口参数: nIDResource = 图片资源ID
/*****************************************************************************/
void CDazzleButton::SetBitmap(UINT nIDResource)
{
if(m_bitmap.m_hObject != NULL) m_bitmap.DeleteObject();
m_bitmap.LoadBitmap(nIDResource);
}
/*****************************************************************************/
// 函数说明: 子类化函数时
/*****************************************************************************/
void CDazzleButton::PreSubclassWindow()
{
//设置按钮风格为自绘,带图标
ModifyStyle(0, BS_OWNERDRAW|BS_ICON);
CButton::PreSubclassWindow();
}
/*****************************************************************************/
// 函数说明: 鼠标移动时
/*****************************************************************************/
void CDazzleButton::OnMouseMove(UINT nFlags, CPoint point)
{
//跟踪鼠标动作,发出WM_MOUSELEAVE和WM_MOUSEHOVER消息,并做标记
if(!m_fgTracking)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.dwFlags = TME_LEAVE|TME_HOVER; //发出WM_MOUSELEAVE和WM_MOUSEHOVER消息
//tme.hwndTrack = m_hWnd;
tme.hwndTrack = GetSafeHwnd(); //待跟踪窗口句柄
tme.dwHoverTime = 1; //鼠标停留1ms时,发出WM_MOUSEHOVER消息
m_fgTracking = _TrackMouseEvent(&tme); //启动跟踪
}
CButton::OnMouseMove(nFlags, point);
}
/*****************************************************************************/
// 函数说明: 鼠标进入时
/*****************************************************************************/
void CDazzleButton::OnMouseHover(WPARAM wParam, LPARAM lParam)
{
m_fgTracking = TRUE;
Invalidate(FALSE); //重绘窗口
}
/*****************************************************************************/
// 函数说明: 鼠标离开时
/*****************************************************************************/
void CDazzleButton::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
m_fgTracking = FALSE;
Invalidate(FALSE); //重绘窗口
}
/*****************************************************************************/
// 函数说明: 颜色变亮或变暗
// 入口参数: colSrc = 原颜色 iLevel = 变这或变暗的级数
// 返回参数: 修改后的颜色
/*****************************************************************************/
COLORREF CDazzleButton::ColorAdjust(COLORREF colSrc, INT iLevel)
{
COLORREF colRet;
INT r, g, b;
r = GetRValue(colSrc)+iLevel;
if(r>255) r = 255;
if(r<0) r = 0;
g = GetGValue(colSrc)+iLevel;
if(g>255) g = 255;
if(g<0) g = 0;
b = GetBValue(colSrc)+iLevel;
if(b>255) b = 255;
if(b<0) b = 0;
colRet = RGB(r, g, b);
return colRet;
}
/*****************************************************************************/
// 函数说明: 计算颜色变化到最亮时的步长
// 入口参数: color = 颜色 iLevel = 变化级数
// 返回参数: 步长
/*****************************************************************************/
UINT CDazzleButton::GetBrightenStep(COLORREF color, UINT nLevel)
{
UINT nStep = 1;
BYTE bValue, bMin=255;
if(nLevel > 0)
{
bValue = GetRValue(color);
if(bValue<bMin) bMin = bValue;
bValue = GetGValue(color);
if(bValue<bMin) bMin = bValue;
bValue = GetBValue(color);
if(bValue<bMin) bMin = bValue;
nStep = (255-bMin)/nLevel;
}
return nS
没有合适的资源?快使用搜索试试~ 我知道了~
四种风格自绘按钮,包括渐变色、位图按钮,可指定颜色、字体及图标
共51个文件
obj:8个
ico:6个
h:5个
4星 · 超过85%的资源 需积分: 50 66 下载量 83 浏览量
2014-03-10
10:52:48
上传
评论 2
收藏 6.52MB RAR 举报
温馨提示
四种风格自绘按钮,包括渐变色、位图按钮,可指定背景及文字颜色、字体及图标。 字体可设置加粗、斜体、下划线。图标可与文字同时显示。 位图按钮有去背景功能,因此实际上可做出任意形状按钮。各种状态的按钮图及黑白遮盖图均集中于一张图片中,软件res目录下提供参考样图。
资源推荐
资源详情
资源评论
收起资源包目录
Button.rar (51个子文件)
Button
DazzleButton.cpp 18KB
Button.dsw 518B
Debug
vc60.pdb 356KB
ButtonDlg.sbr 0B
Button.sbr 0B
Button.exe 2.03MB
vc60.idb 201KB
StdAfx.obj 103KB
DazzleButton.sbr 0B
Button.bsc 2.99MB
Button.obj 13KB
Button.res 10KB
Button.pdb 3.9MB
ButtonDlg.obj 17KB
StdAfx.sbr 1.3MB
Button.pch 6.51MB
Button.ilk 2.39MB
DazzleButton.obj 27KB
DazzleButton.h 3KB
ButtonDlg.h 1KB
Button.plg 3KB
Button.aps 62KB
ButtonDlg.cpp 3KB
Button.opt 54KB
res
Button.bmp 31KB
config.ico 2KB
Button.ico 1KB
note.ico 2KB
folder.ico 2KB
Thumbs.db 12KB
save.ico 766B
Button.rc2 398B
Button.psd 36KB
exit.ico 2KB
Button.ncb 65KB
Release
Button.exe 252KB
vc60.idb 49KB
StdAfx.obj 702B
Button.obj 9KB
Button.res 10KB
ButtonDlg.obj 13KB
Button.pch 5.33MB
DazzleButton.obj 20KB
Button.dsp 4KB
Resource.h 954B
StdAfx.cpp 208B
Button.clw 1KB
Button.cpp 1KB
Button.h 1KB
StdAfx.h 1KB
Button.rc 5KB
共 51 条
- 1
VcTrue
- 粉丝: 4
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页