在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例常规C/C++编程 → 按钮导航界面

按钮导航界面

常规C/C++编程

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.29M
  • 下载次数:6
  • 浏览次数:52
  • 发布时间:2024-10-02
  • 实例类别:常规C/C++编程
  • 发 布 人:15617738452
  • 文件格式:.zip
  • 所需积分:2

实例介绍

【实例简介】

基于visual C 的按钮导航界面源码

【实例截图】

from clipboard

【核心代码】

#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);
}


实例下载地址

按钮导航界面

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警