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

CxStatic: a CStatic control with text wrapping

, 17 Feb 2005
Rate this:
Please Sign up or sign in to vote.
A CStatic control with text wrapping, color, and transparency.

Sample Image


Recently, I was looking for a good CStatic control that supports text wrapping (even with SS_CENTERIMAGE), font and color change, transparency... I had a look at CLabel by Norm.Net but was a bit disappointed because it was lacking text wrapping and was buggy (control is not refreshed after text change when transparent). First, I tried to find what was wrong, but finally I decided to write my own control.
This control is updated frequently so feel free to to drop in any time.

Using the code

How to add this control to your project:

  1. Copy files CxStatic.h, CxStatic.cpp and MemDC.h to your project directory, and add those files to your project.
  2. Put #include "CxStatic.h" in files where you plan to use this class.
  3. Change CStatic definitions to CxStatic.
  4. Use the API described below:
    void    SetBkColor(COLORREF rgb, 
            COLORREF crBkgndHigh = 0, BackFillMode mode = Normal);
    void    SetTransparent(BOOL bTranspMode);
    void    SetTextColor(COLORREF col);
    void    SetFont(const CString& strFont, int nPointSize, 
            int nWeight, BOOL bRedraw = TRUE);
    void    SetFont(LOGFONT *pLogFont, BOOL bRedraw /*= TRUE*/);
    void    Setfont(CFont *pFont, BOOL bRedraw /*= TRUE*/);
    void    SetFont3D(BOOL bFont3D, Type3D type);
    void    SetAutoAdjustFont(BOOL bAutoAdjustFont);
    BOOL    SetBitmap(HBITMAP hBitmap, ImageSize Emode = FitControl, 
       COLORREF rgbTransparent =  0xFF000000);
    BOOL    SetBitmap(UINT nIDResource, ImageSize Emode = FitControl,
       COLORREF rgbTransparent =  0xFF000000);// Loads bitmap from resource ID
    BOOL    SetBitmap(LPCTSTR lpszResName, ImageSize Emode = FitControl,
       COLORREF rgbTransparent = 0xFF000000);// Loads bitmap from file
    void    SetWindowText(LPCTSTR strText);
    void    Format(LPCTSTR szFmt, ...);
    void     AppendText(LPCTSTR szFmt, ...);

Example of use

m_staGradient.SetTextColor( WHITE );
m_staGradient.SetFont("Arial", 16, FW_NORMAL);
// Choose font

m_staGradient.Format("Counter = %d", nCounter);
//like CString format method

m_staGradient.SetBkColor( RGB(255,240,150), RGB(124,0,0), 
  CxStatic::HGradient); // Create horizontal gradient

m_staBitmap.SetBitmap(IDB_BITMAP2, CxStatic::OriginalSize);

I hope someone will find this control useful!


CxStatic v0.1:

  • Initial release.

CxStatic v0.2:

  • Fix UpdateData bug (added WM_SETTEXT handling)
  • Now you can modify font by doing : cxstatic.SendMessage(WM_SETFONT,(WPARAM)fArial20, TRUE);
  • Renamed method SetFormat(...) to Format(...)
  • Changed some SetFont declarations

CxStatic v0.3:

  • Now control is owner-drawn
  • Fix SetBitmap bug (see above)
  • Add very simple multiline support
  • Add Setmoveable properties that enables to move and resize control at run-time

CxStatic v0.4:

  • Fix memory leak
  • Add Drag'nDrop Support for BMP files
  • Fix text alignment bug since 0.3
  • Modify methods signature(CString to LPCTSTR) and more Unicode compliant
  • Fixed bug when loading image from a file


  • Remove flickering when transparent
  • Add SetRounded to create a rounded rect around control
  • Add text scrolling
  • Add tooltip
  • Add contextual menu
  • Use CxImage to provide all image formats support (available in the next release 0.5)
  • Write a better article that explains how it works


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Vincent Richomme
France France
I am currently working as software engineer in a french transport company.
I am interested in C++, MFC, wxWindows and .NET environnement.

Comments and Discussions

GeneralGood job, but (another) PinmemberPixiGreg4-Jan-05 6:46 
GeneralRe: Good job, but (another) PinmemberVince R7-Jan-05 3:15 
GeneralRe: Good job, but (another) PinmemberPixiGreg7-Jan-05 9:43 
GeneralRe: Good job, but (another) PinmemberVince R7-Jan-05 12:39 
GeneralRe: Good job, but (another) PinmemberVince R8-Jan-05 1:42 
GeneralRe: Good job, but (another) PinmemberPixiGreg8-Jan-05 2:32 

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 | Terms of Use | Mobile
Web01 | 2.8.150327.1 | Last Updated 17 Feb 2005
Article Copyright 2004 by Vincent Richomme
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid