使用MFC做界面的程序员,一定很痛苦,因为其默认效果比较古老呆板,实现好的UI效果往往需要费大力气
但是花了精力去做,收获比起只是拖拖界面设置参数的程序员,自然是更多的,最重要的收获,就是灵活和自由,
到最后发现想要什么效果,都可以去自定义实现
最近需要自绘按钮,需求是:能设置背景图、能设置字体、能改文本颜色,
上网找到的都不能完全满足,最后参照着自己实现了一个,经验证可用,贴代码:
//使用示例
COwnerDrawBtn m_btn;
m_btn.MoveWindow(xGap,yGap,BTN_W,BTN_H);
m_btn.SetBkSkin(_T("res\\Btn.bmp"));
m_btn.SetTextFont(120, "宋体");
m_btn.SetTextColor(RGB(255,0,0));
OwnerDrawBtn.h
#ifndef _OWNERDRAW_BTN_H_
#define _OWNERDRAW_BTN_H_
#if _MSC_VER > 1000
#pragma once
#endif
class COwnerDrawBtn : public CButton
{
public:
COwnerDrawBtn();
virtual ~COwnerDrawBtn();
private:
enum{
BS_NORMAL=0,
BS_HOVER,
BS_PUSHDOWN,
BS_DISABLE
};
int m_nStatus; //按钮状态
BOOL m_bInRect; //鼠标进入标志
CString m_strText; //按钮文字
COLORREF m_BackColor; //背景色
COLORREF m_TextColor; //文本颜色
CRect m_BtnRect; //按钮尺寸
CFont m_font; //字体
HBITMAP m_hBkBmp; //背景图片
public:
void DrawButton(CDC *pDC); //画按钮
void DrawBkBmp(CDC *pDC);
void DrawTxt(CDC *pDC);
void SetText(CString str);
void SetTextColor(COLORREF color); //设置文本颜色
void SetBkColor(COLORREF color); //设置背景颜色
void SetTextFont(int FontHight,LPCTSTR FontName); //设置字体
void SetTextFont(CFont* pFont);
void SetBkSkin(HBITMAP h