Transparent Edit Using a Pattern Background Brush

While working on a project that needed a transparent edit control, I found an article from Duncan Weir on this Web site about editor background colors. To see the article, click here

In this article, to make an editor transparent, a NULL_BRUSH was created and returned from the OnCtlColor message handler. This idea was very simple, but when I tried to use it, I found that the blue rectangle of text selection remained in the background after the text was unselected.

So, instead of creating a NULL_BRUSH, I created a pattern brush by using a chunk of bitmap from where the edit control is going to be shown. That is, instead of using this:

void CInPlaceEdit::PrepareBackground( CRect pos )

I did this instead:

void CInPlaceEdit::PrepareBackground( CRect pos )
   CClientDC thisDC( this );
   CClientDC parentDC( GetParent() );
   CDC thisMem;

   INT OldParentMapMode = parentDC.SetMapMode( MM_LOENGLISH );

   CBitmap* pOldThisBmp;

   thisMem.CreateCompatibleDC( &thisDC );
   INT OldThisMapMode = thisMem.SetMapMode( MM_LOENGLISH );

   CSize sz = pos.Size();

   m_Background.CreateCompatibleBitmap( &thisDC,, );

   pOldThisBmp = thisMem.SelectObject( &m_Background );

   thisMem.BitBlt( 0, 0,,, &parentDC, pos.left,
         , SRCCOPY );

   thisMem.SetMapMode( OldThisMapMode );
   thisMem.SelectObject( pOldThisBmp );

   parentDC.SetMapMode( OldParentMapMode );


   m_Brush.CreatePatternBrush( &m_Background );
   if ( m_Brush.m_hObject != NULL )

and then this:

HBRUSH CInPlaceEdit::CtlColor(CDC* pDC, UINT nCtlColor)
   pDC->SelectObject( &m_Brush );

   pDC->SetBrushOrg( 0, 0 );


   return (HBRUSH)m_Brush;
Note: The PrepareBackgound method must be called before showing the edit control. I have created an small sample application to ilustrate that approach. See the code for details.

I hope this can help somebody.




Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • U.S. companies are desperately trying to recruit and hire skilled software engineers and developers, but there's simply not enough quality talent to go around. In response, companies often resort to inferior solutions -- hiring substandard developers and engineers, recruiting talent on a part-time or temporary basis, poaching people from competitors, or burdening an already stressed IT staff for more of their labor. Fortunately, there's a better solution. Read this white paper to learn the business value of …

  • Power and Automation Equipment makers face constrained CAPEX, equipment interoperability issues, and process inefficiencies. However, they can take advantage of secure Internet of Things (IoT) intelligent devices and systems to make better business decisions around asset utilization and performance, while simultaneously optimizing equipment interoperability and services efficiency. Watch this brief video to see how you can unlock the full potential of your assets and value chain.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date