·简介
MFC使用很简单,但是在界面方面MFC可就令人头痛不已了,不能直接使用png图片就罢了,就连简单的设置背景的函数都没有,本文小悠写了一个使用Bitmap绘制位图按钮的示例,虽然是位图,但是至少比起原始的按钮好看了.
·效果展示
·原理
对于一个按钮来说无非是有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
下载地址: