Introduction
To apply transparency on CEdit
control, create a new class derived from
CEdit
control and simply add these members.
In the new class .h file add.
private:
COLORREF m_TextColor;
COLORREF m_BackColor;
CBrush m_Brush;
public:
void SetTextColor(COLORREF col)
{
m_TextColor = col;
UpdateCtrl();
}
void SetBackColor(COLORREF col)
{
m_BackColor = col; �������������������������������������������������
UpdateCtrl();
}
private:
void UpdateCtrl();
protected:
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
afx_msg void OnUpdate();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnKillfocus();
DECLARE_MESSAGE_MAP()
In the new class .cpp file add.
CEditTrans::CEditTrans()
{
m_TextColor = RGB(0, 0, 0);
m_BackColor = TRANS_BACK;
}
BEGIN_MESSAGE_MAP(CEditTrans, CEdit)
ON_WM_CTLCOLOR_REFLECT()
ON_CONTROL_REFLECT(EN_UPDATE, OnUpdate)
ON_WM_LBUTTONDOWN()
ON_CONTROL_REFLECT(EN_KILLFOCUS, OnKillfocus)
END_MESSAGE_MAP()
HBRUSH CEditTrans::CtlColor(CDC* pDC, UINT nCtlColor)�
{
m_Brush.DeleteObject();
if (m_BackColor == TRANS_BACK) {
m_Brush.CreateStockObject(HOLLOW_BRUSH);
pDC->SetBkMode(TRANSPARENT);
}
else {
m_Brush.CreateSolidBrush(m_BackColor);
pDC->SetBkColor(m_BackColor);
}
pDC->SetTextColor(m_TextColor);
return (HBRUSH)m_Brush;
}
void CEditTrans::OnUpdate()�
{
UpdateCtrl();
}
void CEditTrans::UpdateCtrl()
{
CWnd* pParent = GetParent();
CRect rect;
GetWindowRect(rect);
pParent->ScreenToClient(rect);
rect.DeflateRect(2, 2);
pParent->InvalidateRect(rect, FALSE);�
}
Implementation of the class
#include "EditTrans.h"
CEditTrans m_edtTrans;
m_edtTrans.SetBackColor(TRANS_BACK);
That all. Enjoy!