1. 程式人生 > >自定義編輯框控制元件-點陣圖背景編輯框

自定義編輯框控制元件-點陣圖背景編輯框

#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();//背景重繪
}