Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

CxStatic: a CStatic control with text wrapping

0.00/5 (No votes)
17 Feb 2005 1  
A CStatic control with text wrapping, color, and transparency.

Sample Image

Introduction

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!

History

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

TODO

  • 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

License

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