//ColorEdit.h
#ifndef CCOLOREDIT_H_
#define CCOLOREDIT_H_
#pragma once
#include "afxwin.h"
#define TRANS_BACK -1
class CColorEdit :
public CEdit
{
public:
CColorEdit(void);
~CColorEdit(void);
private:
COLORREF m_TextColor;
COLORREF m_BackColor;
CBrush m_Brush;
// Operations
public:
void SetTextColor(COLORREF col) { m_TextColor = col;
UpdateCtrl(); }
void SetBackColor(COLORREF col) { m_BackColor = col;
UpdateCtrl(); }
private:
void UpdateCtrl();
protected:
//{{AFX_MSG(CEditTrans)
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
afx_msg void OnUpdate();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnKillfocus();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#endif// CCOLOREDIT_H_
//ColorEdit.cpp
#include "StdAfx.h"
#include "ColorEdit.h"
CColorEdit::CColorEdit(void)
{
m_TextColor = RGB(0, 0, 0);
m_BackColor = TRANS_BACK;
}
CColorEdit::~CColorEdit(void)
{
}
BEGIN_MESSAGE_MAP(CColorEdit,CEdit)
//{{AFX_MSG_MAP(CColorEdit)
ON_WM_CTLCOLOR_REFLECT()
ON_CONTROL_REFLECT(EN_UPDATE,&OnUpdate)
ON_WM_LBUTTONDOWN()
ON_CONTROL_REFLECT(EN_KILLFOCUS,&OnKillfocus)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
HBRUSH CColorEdit::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);
LOGBRUSH lb1;
lb1.lbStyle = BS_HOLLOW;
lb1.lbColor = RGB(192,224,255);
HBRUSH hBrush1 = CreateBrushIndirect(&lb1);
return hBrush1;
}
void CColorEdit::OnKillfocus()
{
UpdateCtrl();
}
void CColorEdit::OnUpdate()
{
UpdateCtrl();
}
void CColorEdit::OnLButtonDown(UINT nFlags, CPoint point)
{
UpdateCtrl();
CEdit::OnLButtonDown(nFlags, point);
}
void CColorEdit::UpdateCtrl()
{
CWnd* pParent = GetParent();
CRect rect;
GetWindowRect(rect);
pParent->ScreenToClient(rect);
rect.DeflateRect(2, 2);
pParent->InvalidateRect(rect, FALSE);
}