CEdit & CStatic 透明度控件
本文介绍了如何为 CEdit 和 CStatic 控件应用透明度
引言
要为 CEdit
控件应用透明度,请创建一个从 CEdit
控件派生的新类,并简单地添加这些成员。
在新类的 .h 文件中添加。
// Attributes 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(); // Generated message map functions 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()
在新类的 .cpp 文件中添加。
CEditTrans::CEditTrans() { m_TextColor = RGB(0, 0, 0); m_BackColor = TRANS_BACK; } BEGIN_MESSAGE_MAP(CEditTrans, CEdit) //{{AFX_MSG_MAP(CEditTrans) 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 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); }
类的实现
#include "EditTrans.h" //Derived control from ClassWizard CEditTrans m_edtTrans; //To make transparency m_edtTrans.SetBackColor(TRANS_BACK);
就这样。享受吧!