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

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

, 20 Sep 2000
Rate this:
Please Sign up or sign in to vote.
A fully stocked owner drawn RichControl class
<!-- Article Starts -->
  • Download demo executable and project - 12 Kb (v1.0beta)
  • Download CLabel source - 4 Kb (v1.0beta)
  • <!-- STEP 3. Add the article text.-->

    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

    Share

    About the Author

    NormDroid
    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
    Follow on   Twitter

    Comments and Discussions

     
    GeneralMy vote of 1 PinmemberSheetal_Joshi8-Dec-09 6:04 
    GeneralMy vote of 1 PinmemberRyleigh27-Mar-09 7:38 
    GeneralRe: My vote of 1 PingroupNorm .net20-May-09 4:47 
    Generalvertically input text control Pinmemberjirigala29-Nov-02 21:53 
    GeneralA bout Unicode in C# Control Pinmemberbvhhoang15-Sep-02 17:35 
    Generalbad coding style PinsussMike20-Oct-00 3:51 
    GeneralOk whos the joker PinsussSilly boy20-Oct-00 4:06 
    GeneralMybe this is better PinsussNorm 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 Pinsussmike26-Oct-00 21:56 
    GeneralRe: Mybe this is better PinmemberPaulo17-Mar-02 12:59 
    GeneralRe: bad coding style PinsussMelissa20-Oct-00 8:17 
    GeneralRe: bad coding style PinmemberJon Rista20-Dec-01 14:57 
    GeneralRe: bad coding style PinmemberNormski6-Aug-03 20:55 
    GeneralExcellent Article PinsussRanjeet Chakraborty27-Sep-00 23:31 
    GeneralRe: Excellent Article PinsussNorm Almond28-Sep-00 3:03 
    GeneralRe: Excellent Article PinsussPeter28-Sep-00 9:19 
    GeneralGetting started with C# PinsussPhil Harding22-Sep-00 3:31 
    GeneralRe: Getting started with C# PinsussNorm Almond22-Sep-00 4:00 
    GeneralRe: Getting started with C# PinsussRyan Schneider26-Sep-00 5:56 
    GeneralRe: Getting started with C# PinsussNorm Almond27-Sep-00 4:22 
    QuestionLow rating? PinsussChris Maunder21-Sep-00 11:55 
    AnswerRe: Low rating? PinsussAlex21-Sep-00 15:44 
    AnswerRe: Low rating? PinsussNorm Almond22-Sep-00 0:15 
    GeneralRe: Low rating? PinsussAlex22-Sep-00 13:54 
    QuestionWell, what did you think? PinsussAlvaro Mendez21-Sep-00 8:21 

    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.140814.1 | Last Updated 21 Sep 2000
    Article Copyright 2000 by NormDroid
    Everything else Copyright © CodeProject, 1999-2014
    Terms of Service
    Layout: fixed | fluid