资源简介
MFC自绘按钮类,显示点击,悬浮,初始状态,调用按钮类的SetBitmapId函数。
代码片段和文件信息
// PicButton.cpp : 实现文件
//
#include “stdafx.h“
#include “MFCApplication5.h“
#include “PicButton.h“
// CPicButton
IMPLEMENT_DYNAMIC(CPicButton CButton)
CPicButton::CPicButton()
{
m_bOver/*(鼠标位于按钮之上)*/ = FALSE;
m_bSelected/*(按钮被按下)*/ = FALSE;
m_bTracking/*(在鼠标按下释放)*/ = FALSE;
m_bFocus /*按钮为当前焦点*/ = FALSE;
}
CPicButton::~CPicButton()
{
}
BEGIN_MESSAGE_MAP(CPicButton CButton)
ON_WM_MOUSEMOVE()
ON_WM_MOUSELEAVE()
ON_WM_MOUSEHOVER()
END_MESSAGE_MAP()
// CPicButton 消息处理程序
void CPicButton::onmousemove(UINT nFlags CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (!m_bTracking)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE | TME_HOVER;
tme.dwHoverTime = 100;//光标停在按钮上,改变状态的时间,以1毫秒为单位
m_bTracking = _TrackMouseEvent(&tme);
} CButton::onmousemove(nFlags point);
}
void CPicButton::onmouseleave()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_bOver = FALSE; // 鼠标没位于按钮之上
m_bTracking = FALSE; //鼠标离开按钮
InvalidateRect(NULL FALSE); //让按钮重画
CButton::onmouseleave();
}
void CPicButton::OnMouseHover(UINT nFlags CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_bOver = TRUE; //鼠标盘旋在按钮上空
InvalidateRect(NULL); //重画!
CButton::OnMouseHover(nFlags point);
}
void CPicButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CRect rect = lpDrawItemStruct->rcItem;
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
int nSaveDC = pDC->SaveDC();
UINT state = lpDrawItemStruct->itemState;
//根据按钮的状态贴图
//(以下贴按钮状态图,分以下几种情况来贴,,,和我们平常贴背景图片一样的做法)
//鼠标停留按钮的状态
if (m_bOver)
{
//(以下按钮贴图,,可以用我们自己以前贴背景图的方法去做)
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap *pOldBmp;
pOldBmp = MemDC.Selectobject(&m_OverBitmap);//加载停留状态
pDC->BitBlt(0 0 rect.Width() rect.Height() &MemDC 0 0 SRCCOPY);
}
else
{
//初始状态
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap *pOldBmp;
pOldBmp = MemDC.Selectobject(&m_NormalBitmap);//加载最初状态
BITMAP bmp;
m_NormalBitmap.Getobject(sizeof(bmp) &bmp);
pDC->BitBlt(0 0 rect.Width() rect.Height() &MemDC 0 0 SRCCOPY);
}
//按钮被按下(选中)
if (state & ODS_SELECTED)
{
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap *pOldBmp;
pOldBmp = MemDC.Selectobject(&m_PressedBitmap);
BITMAP bmp;
//pOldBmp->GetBitmap(&bmp);
m_PressedBitmap.Getobject(sizeof(bmp) &bmp);
pDC->BitBlt(0 0 rect.Width() rect.Height() &MemDC 0 0 SRCCOPY);
}
// TODO: 添加您的代码以绘制指定项
}
void CPicButton::SetBitmapId(int nOver int nNormal int nPressed int nFocus)
{
m_NormalBitmap.LoadBitmap(nNormal);
m_PressedBitmap.LoadBitmap(nPressed);
m_FocusBitmap.LoadBitmap(nFocus);
m_OverBitmap.LoadBitmap(nOver);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-06-16 11:27 CPicButton\
文件 3099 2017-06-16 09:50 CPicButton\PicButton.cpp
文件 968 2017-06-16 09:50 CPicButton\PicButton.h
- 上一篇:数据结构课程设计 带括号的算术表达式求值
- 下一篇:PIC18F452串口通信程序
相关资源
- MFC按钮美化
- MFC 动态创建按钮
- MFC实现可拖动的按钮
- MFC BUTTON按钮控件,设置按钮透明,按
- C++MFC XP样式按钮
- 动态生成多个按钮
- Win32——创建美观的按钮控件
- C++异形窗口+WEB控件+关闭按钮 完美实
- CButtonST按钮增强类可在VS2012直接使用
- cocos2d实现button(按钮)效果
- C++实战源码-工具栏按钮多选效果
- C++实战源码-工具栏按钮的热点效果
- C++实战源码-工具栏按钮单选效果
- C++实战源码-灰度最大化与最小化关闭
- C++实战源码-可调整按钮位置的工具栏
- C++实战源码-按钮七巧板
- C++实战源码-固定按钮工具栏
- C++实战源码-位图和图标按钮
- C++实战源码-动画按钮
- C++ 隐藏和显示“开始”按钮
- c++自定义按钮控件
- MFC透明按钮
- MFC按钮实现按下弹起位图效果
- gdi+绘制png透明按钮
- MFC多功能按钮
- C++builder 单选和复选按钮
- VC++界面编程之--自绘按钮(CButton)皮
- MFC 窗口界面美化 静态超链接 圆形按
- VC6.0改变按钮的背景颜色
- MFC自绘按钮类,点击、悬浮,初始状
评论
共有 条评论