1.BmpEdit.h
class CBmpEdit : public CEdit//以CEdit为基类派生
{
public:
CBmpEdit();
CBitmap m_Bitmap;//声明CBitmap类对象m_Bitmap
public:
virtual ~CBmpEdit();
// Generated message map functions
protected:
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnChange();
DECLARE_MESSAGE_MAP()
};
2.BmpEdit.cpp
#include "stdafx.h"
//#include "BmpBKEdit.h" //IDB_BITMAP1
#include "BmpEdit.h"
#include "resource.h"
CBmpEdit::CBmpEdit()
{
m_Bitmap.LoadBitmap(IDB_BITMAP1);//构造函数中加载位图资源
}
CBmpEdit::~CBmpEdit()
{
}
BEGIN_MESSAGE_MAP(CBmpEdit, CEdit)
ON_WM_CTLCOLOR_REFLECT()
ON_WM_ERASEBKGND()
ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
END_MESSAGE_MAP()
/
// CBmpEdit message handlers
HBRUSH CBmpEdit::CtlColor(CDC* pDC, UINT nCtlColor) //处理CBmpEdit类的WM_CTLCOLOR消息
{
pDC->SetBkMode(TRANSPARENT);//设置文本背景透明
// return TRUE;
return NULL;
}
BOOL CBmpEdit::OnEraseBkgnd(CDC* pDC)//处理CBmpEdit类的WM_ERASEBKGND消息
{
CDC memDC;//设备上下文
memDC.CreateCompatibleDC(pDC);//创建内存设备上下文
memDC.SelectObject(&m_Bitmap);//将位图选入设备上下文
BITMAP m_Bmp;//声明BITMAP对象
m_Bitmap.GetBitmap(&m_Bmp);//获取位图信息
int x = m_Bmp.bmWidth;//获取位图的宽度
int y = m_Bmp.bmHeight;//获取位图的高度
CRect rect;//声明区域对象
GetClientRect(rect);//获取编辑框客户区
pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, x, y, SRCCOPY);//绘制位图背景
memDC.DeleteDC();//释放内存设备上下文
return TRUE;
//return CEdit::OnEraseBkgnd(pDC);
}
void CBmpEdit::OnChange() //处理CBmpEdit类的EN_CHANGE消息
{
Invalidate();//背景重绘
}