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

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

Share

About the Author

Vincent Richomme
Researcher
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

 
QuestionLicensing terms PinmemberAnupTR25-Apr-13 10:21 
Generalgood job Pinmemberbatsword20-Aug-10 18:02 
GeneralThanks a lot! Pinmember_Marina_9-Feb-10 5:00 
GeneralSetDlgItemText Error PinmemberHongjun Ge8-Aug-06 18:08 
GeneralCxStatic in wxWdigets Pinmemberseti6.8m29-Jan-06 23:15 
GeneralBig pictures - bug Pinmemberdenis-cubic11-Jan-06 2:53 
GeneralPreSubclassWindow PinmemberOddBod6-Nov-05 1:29 
GeneralRe: PreSubclassWindow PinmemberVincent_RICHOMME9-Feb-06 21:39 
GeneralText position not good PinmemberJPBOULEY6-Feb-05 0:37 
GeneralRe: Text position not good PinmemberVince R8-Feb-05 3:30 
GeneralRe: Text position not good PinmemberJPBOULEY9-Feb-05 4:01 
Hi,
I have work a little to fix that and the main problem is on the GetStyle() function. According Microsoft documentation style retuned is not from the control but on the dialog. Because have use the CxStatic class for presonnal application I have find a quick fix by passing an additionnal psoition parameter. It is working but it's not "beautiful" and text position is not completely controlled.
 
Best regards
 

GeneralRe: Text position not good PinmemberVince R9-Feb-05 8:35 
GeneralUNICODE & Remove Limits PinmemberJimmyO26-Jan-05 22:32 
GeneralGood job, but (another) PinmemberPixiGreg4-Jan-05 5:46 
GeneralRe: Good job, but (another) PinmemberVince R7-Jan-05 2:15 
GeneralRe: Good job, but (another) PinmemberPixiGreg7-Jan-05 8:43 
GeneralRe: Good job, but (another) PinmemberVince R7-Jan-05 11:39 
GeneralRe: Good job, but (another) PinmemberVince R8-Jan-05 0:42 
GeneralRe: Good job, but (another) PinmemberPixiGreg8-Jan-05 1:32 
GeneralNice work but Pinmemberemadns21-Dec-04 22:18 
GeneralRe: Nice work but PinmemberVince R21-Dec-04 23:37 

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