CEdit & CStatic Transparency Control

来源:互联网 发布:淘宝店铺商品详情模板 编辑:程序博客网 时间:2024/05/21 17:45

CEdit & CStatic Transparency Control

DCUtility6 Oct 2001 CPOL
Rate this:
vote 1vote 2vote 3vote 4vote 5
 
This acticle explain how to apply transparency on CEdit and CStatic Controls
  • Download source files - 2.86 Kb
  • Download demo project - 22.80 Kb

Sample Image - CtrlTrans.gif

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.

// Attributesprivate:    COLORREF    m_TextColor;    COLORREF    m_BackColor;    CBrush        m_Brush;    // Operationspublic:    void SetTextColor(COLORREF col)     {         m_TextColor = col;        UpdateCtrl();                 }    void SetBackColor(COLORREF col)     {         m_BackColor = col;                                                           UpdateCtrl();                }private:    void UpdateCtrl();    // Generated message map functionsprotected:    //{{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()

In the new class .cpp file add.

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_MAPEND_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"//Derived control from ClassWizardCEditTrans m_edtTrans; //To make transparencym_edtTrans.SetBackColor(TRANS_BACK); 

That all. Enjoy!

0 0
原创粉丝点击