(1)新建一个基于对话框的应用程序
(2)创建一个以CEdit类为基类的派生类CBmpEdit (在classview中右击new class)
(3)在RecourseView中右击insert一个位图资源
(4)在CBmpEdit 类的头文件中声明一个CBitmap类对象m_Bitmap
(5)在CBmpEdit 类的构造函数中加载位图资源,代码如下:
CBmpEdit::CBmpEdit()
{
m_Bitmap.LoadBitmap(IDB_BITMAP1);
}
(6)处理CBmpEdit 类的=WM_CTLCOLOR消息
HBRUSH CBmpEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
// TODO: Change any attributes of the DC here
pDC->SetBkMode(TRANSPARENT); //设置文本背景透明
// TODO: Return a non-NULL brush if the parent's handler should not be called
return NULL;
}
(7)处理CBmpEdit 类的WM_ERASEBKGND消息,在该消息的处理函数中绘制编辑框背景
BOOL CBmpEdit::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
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); //禁止调用基类方法
}
(8)处理CBmpEdit 类的=EN_CHANGE消息
void CBmpEdit::OnChange()
{
Invalidate(); //重绘背景
}
(9)应用程序的头文件 2_058Dlg.h里要包含新添加类的头文件。即在2_058Dlg.h中添加代码#include "BmpEdit.h"
(10)为编辑框控件添加变量m_Edit, 注意类型要为CBmpEdit