|
1. Imported Win32 API calls - you must use .net api.
2. Hungarian notation - read .net sdk documentation. You should use different style of code. Microsoft provide lot recomendations for naming.
3. lot of Set* functions -> In C# you must use properties.
4. .net API has systembrushes. It's bad style to create your own
5. and _many_ other defects.
final result: 1.0
p.s. sorry for english, my C++ language is much better
|
|
|
|
|
Teh hee I never laughed so much.
Ur engleesh ist very bad considiring you r called falconrulez from u s a and u sine ur nam Mike.
Mai be u write better code then, hey!
|
|
|
|
|
/// 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
//
//
|
|
|
|
|
hi. Yeah, that is much better ... but there some improvements.
1. I think _all_ font properties and variables should be removed, because RichControl has Font property.
(VS Designer can modify property with type Font)
2. m_crColor & backcolor vars & properties should be removed - use ForeColor & BackColor from RichControl
3. Remove GetStockObject - RichControl have DefaultFont property.
4. m_hwndBrush = new SolidBrush(SystemColors.Control);
-> must be changed to SystemBrushes.Control;
5. BrowsableAttribute is true by default - don't need to publish that every time...
6. in all cases "new Pen(SystemColors.xxx)" should be replaced with "SystemPens.xxx"
7. from Paint:
switch (m_border)
{
[skip]
}
... look in2 msdn for ControlPaint class (it can be found by text search)
8. I don't like winapi in net. Replace ShellExecute, please
//mike
|
|
|
|
|
Hey Mike, what about doing at least one useful thing in your life like posting an article yourself, heh? That way we all can see how beautiful is your coding style (sigh) so we can have a little laughs here
|
|
|
|
|
Hi Mike,
I am work on a project to building a blak box trading system
for a 400 person securities trading firm.
Do you know of any one who would like to work on this project.
Let me know.
Thanks.
|
|
|
|
|
I have to agree with mike, this is pretty horrid coding style. Why use C# when your going to import the Win32 API and use that? That pretty much defeats the purpose of .Net and C#.
While its nice to see that its possible to easily convert an MFC program to C#, I think this could have been done far better, by actually USING .Net and all that C# has to offer. Its no wonder this has such a low rating.
If you want to improove ratings, try making this a REAL .Net project and really use all that C# has to offer.
|
|
|
|
|
Considering this was done when .net was still beta one, i'd suggest you keep those type of comments to yourself.
BTW: this article are been superceded with the *built in* functionality offered by the .net framework.
|
|
|
|