Click here to Skip to main content
Click here to Skip to main content

CEdit & CStatic Transparency Control

, 6 Oct 2001
Rate this:
Please Sign up or sign in to vote.
This acticle explain how to apply transparency on CEdit and CStatic Controls

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.

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

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_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); 
}

Implementation of the class

#include "EditTrans.h"

//Derived control from ClassWizard
CEditTrans m_edtTrans; 

//To make transparency
m_edtTrans.SetBackColor(TRANS_BACK); 

That all. Enjoy!

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

DCUtility
DCUtility
Canada Canada

Comments and Discussions

 
QuestionRedraw on old letters [modified] Pinmemberburak koprulu2-Dec-11 6:32 
QuestionMy version that works in windows 7 PinmemberEarl K.26-Nov-11 3:42 
http://whateveriwannablog.blogspot.com/2011/11/creating-transparent-textboxedit.html[^]
 
I haven't tested this in a multiline edit control though.
QuestionCommon Control manifest in VC2005&2008 break the transparent effect Pinmembermarship2-Aug-11 2:19 
AnswerRe: Common Control manifest in VC2005&2008 break the transparent effect Pinmemberjeabrown28-Aug-11 8:56 
QuestionUsing plain C++ gives me a black single line editcontrol. Multiline is OK Pinmemberjdekeij8-Aug-08 1:26 
QuestionUrgent Please help PinmemberTushar Jadhav6-Jul-07 21:53 
QuestionLong string -> CEdit is dirty Pinmemberritaivanova10-Apr-06 4:16 
AnswerRe: Long string -> CEdit is dirty PinmemberGigi B.14-Jul-06 5:27 
GeneralChange font of CEdit Pinmembervikas amin23-Sep-05 1:31 
GeneralMulti line edit PinmemberAlex Evans8-May-05 20:21 
Generalcentering text in edit box Pinmembervivadotnet18-Jun-04 13:34 
Generalsuggestion PinmemberPaolo Messina4-May-04 5:38 
GeneralRe: suggestion PinmemberMerlinYen11-Jan-06 18:57 
GeneralRe: suggestion PinmemberPaolo Messina11-Jan-06 22:29 
GeneralMulti-lined Edit and ListBox Transparency Controls PinmemberRay Livezey23-Jun-03 1:39 
Generalnice work . . but PinmemberSkizmo7-Mar-03 1:47 
GeneralRe: nice work . . but Pinmembergodelian9-Apr-03 20:51 
GeneralRe: nice work . . but PinmemberPaul Kissel5-Jun-03 14:27 
GeneralRe: nice work . . but Pinmembersmjones22-Aug-03 4:43 
Generalbug of edit trans PinmemberShuyi Vi25-Feb-03 14:49 
GeneralRe: bug of edit trans PinmemberMerlinYen11-Jan-06 19:04 
Generalthis doesn't work on Windows2000 Server Familiy PinsussAnonymous119-Aug-02 23:40 
Generalthis doesn't work on WindowsXP Pinsussalkee23-Jul-02 22:54 
GeneralRe: this doesn't work on WindowsXP PinsussAnonymous25-Jul-02 11:23 
GeneralRe: this doesn't work on WindowsXP PinmemberMagetek21-Jan-03 5:39 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web04 | 2.8.140721.1 | Last Updated 7 Oct 2001
Article Copyright 2001 by DCUtility
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid