· 简介
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
下载地址:
http://pan.baidu.com/s/1jG81bHs
本文出自【悠然品鉴】转载请注明出处:http://www.youranshare.com/codeorg/sid/120.html