分类: C/C++
2008-04-23 21:37:01
如何在EDITBOX控件中使用背景位图
作者:
public: CBitmap m_bmp; protected: CBrush m_brHollow; CBitmap *m_pbmCurrent;
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor); afx_msg void OnLButtonUp(UINT nFlags, CPoint point); afx_msg void OnChange(); afx_msg BOOL OnEraseBkgnd(CDC* pDC);
void CMyEditCtrl::OnChange()
{
Invalidate(); ///强制进行更新
}
2.2 OnLButtonUp();void CMyEditCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
Invalidate(); ///强制进行更新
CEdit::OnLButtonUp(nFlags, point);
}
2.3 CtlColor(CDC* pDC, UINT nCtlColor)HBRUSH CMyEditCtrl::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetBkMode(TRANSPARENT); ///选择透明背景模式
pDC->SetTextColor(RGB(0xff,0xff,0xff)); ///设置文字颜色为白色
return m_brHollow;
}
2.4 OnEraseBkgnd(CDC* pDC)BOOL CMyEditCtrl::OnEraseBkgnd(CDC* pDC)
{
BITMAP bm;
m_bmp.GetBitmap(&bm);
m_pbmCurrent = &m_bmp;
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dcMem.SelectObject(m_pbmCurrent); ///选择位图
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY); ///画出位图
dcMem.SelectObject(pOldBitmap);
return TRUE;
}
说明:其中代码有些部分简化了,有些部分还可以优化。对于底图的选择,在这里我选择是与我EDITBOX一样大小的底图,如果两者不一样大小,需要修改部分OnEraseBkgnd(CDC*
pDC)代码。