Click here to Skip to main content
15,887,135 members
Articles / Programming Languages / C#
Article

Extended Use of .NET RichControl Class - C# CLabel 1.0beta

Rate me:
Please Sign up or sign in to vote.
1.04/5 (17 votes)
20 Sep 2000 232K   273   24   28
A fully stocked owner drawn RichControl class
  • Download demo executable and project - 12 Kb (v1.0beta)
  • Download CLabel source - 4 Kb (v1.0beta)
  • Ever wanted a static control that behaved like a Visual Basic label control? Well this could be just the thing you might be looking for. This control was first posted as an CStatic derived class in my article Extended Use of the CStatic Class. The code in that article has been rewritten in C# using the .NET framework

    See the original article for the programming API. The main differences are that all COLORREF parameters are now Color's, CString's become String's, and BOOL's become bool's.

    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


    Written By
    Software Developer (Senior) Software Kinetics
    United Kingdom United Kingdom




    Software Kinetics
    are experts in developing customised and bespoke applications and have expertise in the development of desktop, mobile and internet applications on Windows.


    We specialise in:

    • User Interface Design
    • Desktop Development
    • Windows Phone Development
    • Windows Presentation Framework
    • Windows Forms
    • Windows Communication Framework
    • Windows Services
    • Network Applications
    • Database Applications
    • Web Development
    • Web Services
    • Silverlight
    • ASP.net


    Visit Software Kinetics

    Comments and Discussions

     
    GeneralMy vote of 1 Pin
    Sheetal_Joshi8-Dec-09 6:04
    Sheetal_Joshi8-Dec-09 6:04 
    GeneralMy vote of 1 Pin
    Ryleigh27-Mar-09 7:38
    Ryleigh27-Mar-09 7:38 
    GeneralRe: My vote of 1 Pin
    NormDroid20-May-09 4:47
    professionalNormDroid20-May-09 4:47 
    Generalvertically input text control Pin
    jirigala29-Nov-02 21:53
    jirigala29-Nov-02 21:53 
    GeneralA bout Unicode in C# Control Pin
    tomriddlex15-Sep-02 17:35
    tomriddlex15-Sep-02 17:35 
    Generalbad coding style Pin
    Mike20-Oct-00 3:51
    Mike20-Oct-00 3:51 
    GeneralOk whos the joker Pin
    silly@hotmail.com20-Oct-00 4:06
    silly@hotmail.com20-Oct-00 4:06 
    GeneralMybe this is better Pin
    Norm Almond20-Oct-00 4:20
    sussNorm Almond20-Oct-00 4:20 
    /// Author: Norm Almond
    // Class: cLabel
    // Version 1.00
    // 20 September 2000
    // Notes:
    // First attempt at Evaluating and using C# and the .NET frameworks
    //
    //------------------------------------------------------------------------------
    namespace Microsoft.Samples.WinForms.Cs.CLabel {
    using System;
    using System.ComponentModel;
    using System.ComponentModel.Design;
    using System.WinForms;
    using System.WinForms.Design;
    using System.Drawing;
    using System.Drawing.Design;
    using System.Drawing.Drawing2D;
    using System.IO;
    using System.Timers;


    //------------------------------------------------------------------------------
    /// Function: CLabel
    //
    // Description: Constructor
    //
    // Notes:
    //
    // Maintenance:
    // Name Date Version Notes
    // NT ALMOND 2009200 1.0beta Origin
    //------------------------------------------------------------------------------
    public class CLabel : RichControl {

    // Imported Win32 API calls
    [sysimport(dll="gdi32.dll")]
    public static extern int GetStockObject(int n);

    [sysimport(dll="shell32.dll")]
    public static extern int ShellExecuteA(int hwnd, String lpOperation, String lpFile, String lpParameters, String lpDirectory, int nShowCmd);

    // Constants (#defines)
    public const int WM_SYSCOLORCHANGE = 0x0015;
    public const int DEFAULT_GUI_FONT = 17;
    public const int SW_SHOWNORMAL = 1;

    // Enumerators
    public enum FlashType {None, Text, Background };
    public enum Type3D { Raised, Sunken};
    public enum BackFillMode { Normal, Gradient };
    public enum TextMode { Left, Center, Right, CenterWrap, LeftWrap};
    public enum BorderStyle { None, Frame, Raised, Sunken};
    public enum Style3D { None, Raised, Sunken};

    // Member Variables
    protected TextMode m_alignment = TextMode.Left;
    protected FontStyle m_fontstyle;
    protected BorderStyle m_border;
    protected Style3D m_font3dstyle;
    protected FlashType m_Type;
    protected Type3D m_3dType;
    protected BackFillMode m_fillmode;
    protected Color m_crText;
    protected Color m_cr3DHiliteColor;
    protected Color m_crHiColor;
    protected Color m_crLoColor;
    protected SolidBrush m_hwndBrush;
    protected SolidBrush m_hBackBrush;
    protected Font m_font;
    protected bool m_bState;
    protected bool m_bLink;
    protected bool m_bTransparent;
    protected bool m_bFont3d;
    protected bool m_bToolTips;
    protected bool m_bRotation;
    protected bool m_bBKColorOverride;
    protected System.Timers.Timer m_timer;

    // Static varible to give labal a new text string when its instantiated
    public static int nCount = 0;

    public CLabel()
    {

    m_bTransparent = false;

    m_crText = SystemColors.WindowText;

    m_bState = false;
    m_bTransparent = false;
    m_bLink = true;
    m_Type = FlashType.None;
    m_bFont3d = false;
    m_bToolTips = false;
    m_bRotation = false;
    m_fillmode = BackFillMode.Normal;
    m_cr3DHiliteColor = Color.White;
    m_border = BorderStyle.None;
    m_font3dstyle = Style3D.None;

    SetStyle(ControlStyles.Opaque, false);
    SetStyle(ControlStyles.ResizeRedraw, true);


    // Auto label generation
    Text = String.Format("Label{0}",++nCount);

    m_hwndBrush = new SolidBrush(SystemColors.Control);

    int nFont = GetStockObject(DEFAULT_GUI_FONT); // Default GUI Font
    m_font = Font.FromHFONT(nFont);

    }

    //------------------------------------------------------------------------------
    /// Function: ~CLabel
    //
    // Description: Destructor
    //
    // Notes:
    //
    // Maintenance:
    // Name Date Version Notes
    // NT ALMOND 2009200 1.0beta Origin
    //------------------------------------------------------------------------------
    ~CLabel()
    {
    }

    //------------------------------------------------------------------------------
    /// Function: SetHyperLink
    //
    // Description: Enables 'hyperlink' mode
    //
    // Notes:
    //
    // Maintenance:
    // Name Date Version Notes
    // NT ALMOND 2009200 1.0beta Origin
    //------------------------------------------------------------------------------
    [
    Category("Label"),
    Description("Enable Hyperlink Mode"),
    Browsable(true),
    ]
    public bool HyperLink {
    get {
    return Cursor != Cursors.Hand;
    }
    set {
    if (value == true)
    Cursor = Cursors.Hand;
    else
    Cursor = Cursors.Arrow;

    }
    }

    //------------------------------------------------------------------------------
    /// Function: SetTextColor
    //
    // Description: Sets Text Color
    //
    // Notes:
    //
    // Maintenance:
    // Name Date Version Notes
    // NT ALMOND 2009200 1.0beta Origin
    //------------------------------------------------------------------------------
    [
    Category("Label"),
    Description("Sets the text color"),
    DefaultValue(0),
    Browsable(true),
    ]
    public Color TextColor {
    get {
    return m_crText;
    }
    set {
    m_crText = value;
    Invalidate();
    Update();
    }
    }

    public bool ShouldPersistTextColor() {
    return !(m_crText == SystemColors.WindowText);
    }



    //------------------------------------------------------------------------------
    /// Function: SetFont3DStyle
    //
    // Description: Sets the font 3D style
    //
    // Notes:
    //
    // Maintenance:
    // Name Date Version Notes
    // NT ALMOND 2009200 1.0beta Origin
    //------------------------------------------------------------------------------
    [
    Category("Label"),
    Description("Font 3D Style"),
    DefaultValue(0),
    Browsable(true),
    ]
    public Style3D Font3DStyle
    {
    get {
    return m_font3dstyle;
    }
    set {
    m_font3dstyle = value;
    Invalidate();
    Update();
    }
    }

    //------------------------------------------------------------------------------
    /// Function: SetBorderStyle
    //
    // Description: Sets the border style
    //
    // Notes:
    //
    // Maintenance:
    // Name Date Version Notes
    // NT ALMOND 2009200 1.0beta Origin
    //------------------------------------------------------------------------------
    [
    Category("Label"),
    Description("Border Style"),
    DefaultValue(0),
    Browsable(true),
    ]
    public BorderStyle LabelBorderStyle
    {
    get {
    return m_border;
    }
    set {
    m_border = value;
    Invalidate();
    Update();
    }
    }

    //------------------------------------------------------------------------------
    /// Function: SetFontItalic
    //
    // Description: Sets the font italic style
    //
    // Notes:
    //
    // Maintenance:
    // Name Date Version Notes
    // NT ALMOND 2009200 1.0beta Origin
    //------------------------------------------------------------------------------
    [
    Category("Label"),
    Description("Italics"),
    DefaultValue(false),
    Browsable(true),
    ]
    public bool FontItalic {
    get {
    return m_fontstyle == FontStyle.Italic;
    }
    set {
    if (value == true)
    m_fontstyle |= FontStyle.Italic; else
    m_fontstyle &= ~FontStyle.Italic;

    m_font = new Font(m_font.Name,m_font.Size,m_fontstyle);
    Invalidate();
    Update();

    }
    }

    //------------------------------------------------------------------------------
    /// Function: SetFontBold
    //
    // Description: Sets the font bold style
    //
    //
    GeneralRe: Mybe this is better Pin
    Mike26-Oct-00 21:56
    Mike26-Oct-00 21:56 
    GeneralRe: Mybe this is better Pin
    Paulo17-Mar-02 12:59
    Paulo17-Mar-02 12:59 
    GeneralRe: bad coding style Pin
    kirby20-Oct-00 8:17
    kirby20-Oct-00 8:17 
    GeneralRe: bad coding style Pin
    20-Dec-01 14:57
    suss20-Dec-01 14:57 
    GeneralRe: bad coding style Pin
    NormDroid6-Aug-03 20:55
    professionalNormDroid6-Aug-03 20:55 
    GeneralExcellent Article Pin
    Ranjeet Chakraborty27-Sep-00 23:31
    Ranjeet Chakraborty27-Sep-00 23:31 
    GeneralRe: Excellent Article Pin
    Norm Almond28-Sep-00 3:03
    sussNorm Almond28-Sep-00 3:03 
    GeneralRe: Excellent Article Pin
    Peter28-Sep-00 9:19
    Peter28-Sep-00 9:19 
    GeneralGetting started with C# Pin
    Phil Harding22-Sep-00 3:31
    Phil Harding22-Sep-00 3:31 
    GeneralRe: Getting started with C# Pin
    Norm Almond22-Sep-00 4:00
    sussNorm Almond22-Sep-00 4:00 
    GeneralRe: Getting started with C# Pin
    Ryan Schneider26-Sep-00 5:56
    Ryan Schneider26-Sep-00 5:56 
    GeneralRe: Getting started with C# Pin
    Norm Almond27-Sep-00 4:22
    sussNorm Almond27-Sep-00 4:22 
    QuestionLow rating? Pin
    Chris Maunder21-Sep-00 11:55
    cofounderChris Maunder21-Sep-00 11:55 
    AnswerRe: Low rating? Pin
    Alex21-Sep-00 15:44
    Alex21-Sep-00 15:44 
    AnswerRe: Low rating? Pin
    Norm Almond22-Sep-00 0:15
    sussNorm Almond22-Sep-00 0:15 
    GeneralRe: Low rating? Pin
    Alex22-Sep-00 13:54
    Alex22-Sep-00 13:54 
    QuestionWell, what did you think? Pin
    Alvaro Mendez21-Sep-00 8:21
    Alvaro Mendez21-Sep-00 8:21 

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

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