WinForm控件开发总结(一)------开篇

我本人不是专业的控件开发人员,只是在平常的工作中,需要自己开发一些控件。在自己开发WinForm 控件的时候,没有太多可以借鉴的资料,只能盯着 MSDN 使劲看,还好总算有些收获。现在我会把这些经验陆陆续续的总结出来,写成一系列方章,希望对看到的朋友有所帮助。今天我来开个头。
      其实开发 WinForm 控件并不是很复杂, .NET 为我们提供了丰富的底层支持。如果你有 MFC或者API图形界面 的开发经验,那么学会 WinForm 控件可能只需要很短的时间 就够了。
      自己开发的 WinForm 控件通常有三种类型:复合控件( Composite Controls ),扩展控件( Extended Controls ),自定义控件( Custom Controls )。    
      复合控件 :将现有的各种控件组合起来,形成一个新的控件,将集中控件的功能集中起来。
      扩展控件 :在现有控件的控件的基础上派生出一个新的控件,为原有控件增加新的功能或者修改原有控件的控能。
      自定义控件 :直接从 System.Windows.Forms.Control 类派生出来。 Control 类提供控件所需要的所有基本功能,包括键盘和鼠标的事件处理。自定义控件是最灵活最强大的方法,但是对开发者的要求也比较高,你必须为 Control 类的 OnPaint 事件写代码,你也可以重写 Control 类的 WndProc 方法,处理更底层的 Windows 消息,所以你应该了解 GDI +和 Windows API 。    
      本系列文章主要介绍自定义控件的开发方法。
      控件(可视化的)的基本特征:
      1.       可视化。
      2.       可以与用户进行交互,比如通过键盘和鼠标。
      3.       暴露出一组属性和方法供开发人员使用。
      4.       暴露出一组事件供开发人员使用。
      5.       控件属性的可持久化。
      6.       可发布和可重用。
      这些特征是我自己总结出来,不一定准确,或者还有遗漏,但是基本上概括了控件的主要方面。
      接下来我们做一个简单的控件来增强一下感性认识。首先启动 VS2005 创建一个 ClassLibrary 工程,命名为 CustomControlSample VS 会自动为我们创建一个 solution 与这个工程同名,然后删掉自动生成的 Class1.cs 文件,最后在 Solution explorer 里右键点击 CustomControlSample 工程选择 Add->Classes… 添加一个新类,将文件的名称命名为 FirstControl 。下边是代码:
      

using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Windows.Forms;
using  System.ComponentModel;
using  System.Drawing;

namespace  CustomControlSample
{
    
public   class  FirstControl : Control
    
{

        
public  FirstControl()
        
{

        }


        
//  ContentAlignment is an enumeration defined in the System.Drawing
        
//  namespace that specifies the alignment of content on a drawing 
        
//  surface.
         private  ContentAlignment alignmentValue  =  ContentAlignment.MiddleLeft;

        [
        Category(
" Alignment " ),
        Description(
" Specifies the alignment of text. " )
        ]
        
public  ContentAlignment TextAlignment
        
{

            
get
            
{
                
return  alignmentValue;
            }

            
set
            
{
                alignmentValue 
=  value;

                
//  The Invalidate method invokes the OnPaint method described 
                
//  in step 3.
                Invalidate();
            }

        }



        
protected   override   void  OnPaint(PaintEventArgs e)
        
{
            
base .OnPaint(e);
            StringFormat style 
=   new  StringFormat();
            style.Alignment 
=  StringAlignment.Near;
            
switch  (alignmentValue)
            
{
                
case  ContentAlignment.MiddleLeft:
                    style.Alignment 
=  StringAlignment.Near;
                    
break ;
                
case  ContentAlignment.MiddleRight:
                    style.Alignment 
=  StringAlignment.Far;
                    
break ;
                
case  ContentAlignment.MiddleCenter:
                    style.Alignment 
=  StringAlignment.Center;
                    
break ;
            }


            
//  Call the DrawString method of the System.Drawing class to write   
            
//  text. Text and ClientRectangle are properties inherited from
            
//  Control.
            e.Graphics.DrawString(
                Text,
                Font,
                
new  SolidBrush(ForeColor),
                ClientRectangle, style);

        }

    }

}

你可能感兴趣的:(C#,winform,alignment,windows,mfc,api,扩展)