ColorEdit

来源:互联网 发布:淘宝一年清多少分 编辑:程序博客网 时间:2024/04/29 22:09

//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);          

原创粉丝点击