实例介绍
【实例简介】
基于visual C 的按钮导航界面源码
【实例截图】
【核心代码】
#include "stdafx.h"
#include "XPStyleButton.h"
#include "CustomButton.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCustomButton
CCustomButton::CCustomButton()
{
m_State = bsNormal;
}
CCustomButton::~CCustomButton()
{
m_State = bsNormal;
}
BEGIN_MESSAGE_MAP(CCustomButton, CButton)
//{{AFX_MSG_MAP(CCustomButton)
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_PAINT()
ON_WM_LBUTTONUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCustomButton message handlers
void CCustomButton::OnLButtonDown(UINT nFlags, CPoint point)
{
m_State = bsDown; //设置按钮按下状态
InvalidateRect(NULL,TRUE); //更新按钮
}
void CCustomButton::OnMouseMove(UINT nFlags, CPoint point)
{
HRGN hRgn = CreateRectRgn(0, 0, 0, 0);
GetWindowRgn(hRgn);
BOOL ret = PtInRegion(hRgn, point.x, point.y);//鼠标是否在按钮上
if(ret) //在按钮上
{
if(m_State == bsDown) //判断按钮是否为按下状态
return ;
if(m_State != bsHot) //判断按钮是否不是热点状态
{
m_State = bsHot; //设置为热点状态
InvalidateRect(NULL,TRUE); //更新按钮
SetCapture(); //捕获鼠标
}
}
else //不在按钮上
{
m_State = bsNormal; //设置按钮状态
InvalidateRect(NULL,TRUE); //更新按钮
ReleaseCapture(); //释放鼠标
}
DeleteObject( hRgn );
CButton::OnMouseMove(nFlags, point);
}
void CCustomButton::OnPaint()
{
CPaintDC dc(this); //获取按钮的设备上下文
CString Text; //定义一个字符串变量
CRect RC; //定义一个区域对象
CFont Font; //定义一个字体对象
CFont *pOldFont; //定义一个字体对象指针,用于存储之前的字体
CBrush Brush; //定义一个画刷对象
CBrush *pOldBrush; //定义一个画刷对象指针,用于存储之前的画刷对象
CPoint PT(2,2); //定义一个点对象
dc.SetBkMode(TRANSPARENT); //将设备上下文背景模式设置为透明
Font.CreateFont(12, 0, 0, 0, FW_HEAVY, 0, 0, 0, ANSI_CHARSET,
OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
VARIABLE_PITCH | FF_SWISS, "宋体"); //创建字体
pOldFont = dc.SelectObject(&Font); //选中新的字体
if(m_State == bsNormal) //判断按钮是否为正常状态
{
Brush.CreateSolidBrush( RGB(230, 230, 230)); //创建指定颜色的画刷
dc.SetTextColor(RGB(0, 0, 0)); //设置文本颜色
}
else if(m_State == bsDown) //判断按钮是否为按下状态
{
Brush.CreateSolidBrush(RGB(100, 100, 180)); //创建指定颜色的画刷
dc.SetTextColor(RGB(250, 250, 0)); //设置文本颜色
}
else if(m_State == bsHot) //判断按钮是否为热点状态
{
Brush.CreateSolidBrush(RGB(230, 230, 130)); //创建指定颜色的画刷
dc.SetTextColor(RGB(50, 50, 250)); //设置文本颜色
}
pOldBrush = dc.SelectObject(&Brush); //选中画刷
GetClientRect(&RC); //获取按钮的客户区域
dc.RoundRect(&RC, PT); //利用当前选中的画刷和画笔绘制按钮区域
HRGN hRgn = CreateRectRgn(RC.left, RC.top, RC.right, RC.bottom); //创建一个选区
SetWindowRgn(hRgn, TRUE); //设置按钮窗口区域
DeleteObject(hRgn); //删除选区
GetWindowText(Text); //获取按钮文本
dc.DrawText(Text, &RC, DT_CENTER | DT_VCENTER | DT_SINGLELINE); //绘制按钮文本
Font.DeleteObject(); //删除字体对象
Brush.DeleteObject(); //删除画刷对象
dc.SelectObject(pOldFont); //恢复原来选中的字体
dc.SelectObject(pOldBrush); //恢复原来选中的画刷
}
void CCustomButton::OnLButtonUp(UINT nFlags, CPoint point)
{
if(m_State != bsNormal) //判断按钮状态
{
m_State = bsNormal; //设置按钮状态
ReleaseCapture(); //释放鼠标捕捉
InvalidateRect(NULL,TRUE); //更新按钮
}
//向父窗口发送命令消息
::SendMessage(GetParent()->m_hWnd,WM_COMMAND, GetDlgCtrlID(), (LPARAM) m_hWnd);
}
标签: 按钮导航界面 Visual C++ 源码
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论