Win控件开发总结
Win 控件开发总结(一)------开篇 我本人不是专业的控件开发人员,只是在平常的工作中,需要自己开发一些控件。在自己 开发 Win 控件的时候,没有太多可以借鉴的资料,只能盯着 MSDN 使劲看,还好总算有 些收获。现在我会把这些经验陆陆续续的总结出来,写成一系列方章,希望对看到的朋友有所帮 助。今天我来开个头。 其实开发 Win 控件并不是很复杂,.NET 为我们提供了丰富的底层支持。如果你有 M FC 或者 API 图形界面的开发经验,那么学会 Win 控件可能只需要很短的时间就够了。 自己开发的 Win 控件通常有三种类型:复合控件(Composite Controls),扩展 控件(Extended Controls),自定义控件(Custom Controls)。 复合控件: 将现有的各种控件组合起来,形成一个新的控件,将集中控件的功能集中起来。 扩展控件:在现有控件的控件的基础上派生出一个新的控件,为原有控件增加新的功能或 者修改原有控件的控能。 自定义控件:直接从 System.Windows.s.Control 类派生出来。Control 类提供控 件所需要的所有基本功能,包括键盘和鼠标的事件处理。自定义控件是最灵活最强大的方法,但 是对开发者的要求也比较高,你必须为 Control 类的 OnPaint 事件写代码,你也可以重写 Con trol 类的 WndProc 方法,处理更底层的 Windows 消息,所以你应该了解 GDI+和 Windows API。 本系列文章主要介绍自定义控件的开发方法。 控件(可视化的)的基本特征: 1. 可视化。 2. 可以与用户进行交互,比如通过键盘和鼠标。 3. 暴露出一组属性和方法供开发人员使用。 4. 暴露出一组事件供开发人员使用。 5. 控件属性的可持久化。 6. 可发布和可重用。 这些特征是我自己总结出来,不一定准确,或者还有遗漏,但是基本上概括了控件的主要 方面。 接下来我们做一个简单的控件来增强一下感性认识。首先启动 VS2005 创建一个 ClassLi brary 工程,命名为 CustomControlSample,VS 会自动为我们创建一个 solution 与这个工 程同名,然后删掉自动生成的 Class1.cs 文件,最后在 Solution explorer 里右键点击 Custo mControlSample 工程选择 Add-Classes… 添加一个新类,将文件的名称命名为 FirstCont rol。下边是代码: using System; using System.Collections.Generic; using System.Text; using System.Windows.s; 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 invokes the OnPaint described // in step 3. Invalidate(); } } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Stringat style = new Stringat(); 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 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); } } } 在上一篇文章里我们创建了一个简单的控件 FirstControl,现在我来介绍一下怎么使用和 调试自己的控件。我希望将过程写的尽可能的详细,让想学习控件开发的朋友容易上手,高 手们见谅。 在同一个 solution 里添加一个 Windows Application 工程(在 Solution Explorer 里右键点击 CustomControlSample solution 选择 Add-New Project…) ,命名为 TestControl。 VS 会为你自动生成一个 , 文件名为 1.cs。 在 Solution Explorer 里双击 1.cs 文件进入到 设计界面。现在我们将 FirstControl 控件添加到工具 箱(ToolBox)里,在 Toolbox 上右键点击,在弹出的菜单中选择 Choose Items… ,在 出现的 Choose Toolbox Items 对话框中点击 Browse… 按钮,在 Open 对话框中选择我 们的控件工程生成的dll(我的dll在 F:\Programs