c语言自绘按钮例子,【MFC】 CBitMap自绘按钮,实现CButton的美化

·简介

MFC使用很简单,但是在界面方面MFC可就令人头痛不已了,不能直接使用png图片就罢了,就连简单的设置背景的函数都没有,本文小悠写了一个使用Bitmap绘制位图按钮的示例,虽然是位图,但是至少比起原始的按钮好看了.

·效果展示

bce6a747ce4ce84a1fd66acbdf0ed34f.gif

·原理

对于一个按钮来说无非是有Normal、Hover、Press、Gray这四种状态,这里自绘的原理就是在按钮对应的四种状态显示不同的位图背景,当鼠标在按钮上悬浮的时候按钮的背景如果不是Hover那就将其修改为Hover的背景,同理当鼠标单击左键按下的时候将按钮的状态背景为Press;

经过上面的这些变化处理,按钮的美化就完成了,为了提高按钮的绘制效率,你可以使用双缓冲进行绘制。

下面是主要的头文件代码:(我只写了3种状态的切换)#pragma once

// CButtonLZ

//按钮的三种状态正常显示、被按下、鼠标在上方悬停时

#define BTNLZ_NORMAL   0x0000

#define BTNLZ_PUSHED   0x0001

#define BTNLZ_FOCUS         0x0002

class CButtonLZ : public CButton

{

DECLARE_DYNAMIC(CButtonLZ)

public:

CButtonLZ();

virtual ~CButtonLZ();

protected:

DECLARE_MESSAGE_MAP()

protected:

//按钮的Id

UINT m_nID;

//当前的状态

DWORD m_CurBtnStatue;

//正常、按下、聚焦

CBitmap m_BmpNormal;

CBitmap m_BmpPushed;

CBitmap m_BmpFocus;

//鼠标事件的跟踪[VS2012之前的版本无法响应WM_MOUSELEAVE 消息,需要手动发送]

TRACKMOUSEEVENT* TME;

BOOL m_IsCanTrack;

};

·示例工程代码下载:(VS 2005的)

解压密码yscode

下载地址:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值