在C#中使用.NET SDK创建控制
下载示例工程 - 8 Kb

介绍
在这篇教程中,我将使用.NET架构创建一个简单的时钟控制示例,这个控制是一个显示当前时间的时钟,
我将指导读者实现秒针并显示钟点数。
文章加亮处是创建这个控制的关键点,读者可以参考其中的代码。创建一个控制的最快的方法是从这里拷
贝一个控制示例代码:
..Program FilesNGWSSDKSamplesQuickStartwinformssamplesCsWritingControlshelloworldcontrol
将目录拷贝到 MyControl目录
..Program FilesNGWSSDKSamplesQuickStartwinformssamplesCsWritingControlsMyControl
将目录下的Hellowordlcontrol文件重命名为myControl.
- Helloworldcontrol.cs -> mycontrol.cs
- Helloworldcontrol.src -> mycontrol.src
将下列文件中的helloworldcontrol改为myControl:
- Hostapp.cs
- Makefile
打开控制台窗口输入 NMAKE ALL. 将建立下列两个文件:
- MyControl.exe – The application that hosts the control
- MyControl.DLL – The actual control.
现在基本的框架代码已经建立好了,我们可以通过运行mycontrol.exe来测试。
现在我们可以开始编写我们的控制.
我们需要添加一些即将使用的 namespaces, namespace包含了我们在控制中所涉及到的类 :
using System.ComponentModel;// Needed for control support using System.Timers; // Needed to support timer using System.Runtime.InteropServices;// Needed for StructLayout attribute
- 下一步是包含一些允许调用WINDOWS操作系统功能的C#扩展特性,我无法找到一个类似
获得系统时间的函数,所以我作了如下定义:// Definition of WINAPI SYSTEMTIME structure [StructLayout(LayoutKind.Sequential)] public class SystemTime { public ushort wYear; public ushort wMonth; public ushort wDayOfWeek; public ushort wDay; public ushort wHour; public ushort wMinute; public ushort wSecond; public ushort wMilliseconds; } // Definition of WINAPI GetLocalTime function[DllImport("Kernel32.dll")] public static extern void GetLocalTime(SystemTime st); - 现在我们申明一些在对象运行期间将被使用的成员变量。
private Colorm_colorHands;private Colorm_colorFace; private boolm_bActivateClock; private System.Timers.Timer m_timer;
这里要注意的是,要在声明任何变量之前引入关键字,而不是像C++那样可以跟变量一起定义。
- 定义构造函数.
跟Java类似,方法可以在内部编写,将来虽然需要经常修改,但修改变得简单易行了。
public MyControl(){ m_colorHands = Color.White; m_colorFace = Color.Blue; SetStyle(ControlStyles.Opaque, false); SetStyle(ControlStyles.ResizeRedraw, true); } - 下一步是定义一些属性,这里包含了一个新的功能:属性标记,他将为其它子系统提供运行时库信息。
[ Category("Clock"), Description("Hands color for Clock"), DefaultValue(0xFFFFFF), ] public Color HandsColor { get { return m_colorHands; } set { m_colorHands = value; Invalidate(); Update(); } }括弧[ ]中的代码定义了特定的属性, get 和 set 函数对于对象外面也是可用的,
要想修改时钟指针的颜色,你可以这样做:someobj.HandColor = Color.Red;
此句隐含调用了set函数。
- 重载基类函数
protected override void OnPaint(PaintEventArgs pe) { // Let base class draw its stuff first base.OnPaint(pe); // Draw code here... }请注意用来重载基类函数的关键字 override
这段代码调用了基类函数
OnPaint(base.OnPaint(pe);)
在代码中其它有价值的地方是:对象建立在堆上,且不需要象C++中进行delete操作. NWGS 中的垃圾
收集功能将会对用NEW分配的对象进行回收。
例如:
{
// ... Some code
SolidBrush brush = new SolidBrush(Color.White)
// Scope ends... no delete operator needed for brush
}
C#的另一个特性时在调用函数时更改变量的取值。
请看如下代码:
CalculatePoint(ptStart, out ptEnd,(st.wHour*5)+(st.wMinute/12), false, rc);
请注意 out 参数,这样定义当进入函数后变量将被更改。
我们可以这样定义:
protected void CalculatePoint(Point pStart, out Point pEnd,
int nPos, bool bFlag, Rectangle rc)
Mycontrol.exe 已经建好了,另一种测试控制的方法是运行 WinDes.exe, 然后建立一个新的 C# Win32Form,
选择Library 菜单下Edit/Add 并且选择 mycontrol.dll
在C#中使用.NET SDK创建控制的更多相关文章
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
ADO.NET 一.ADO.NET概要 ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库 二.ADO.NET的组成 ①System.Data → DataTable, ...
- 痞子衡嵌入式:嵌入式MCU中通用的三重中断控制设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是嵌入式MCU中通用的三重中断控制设计. 我们知道在 MCU 裸机中程序代码之所以能完成多任务并行实时处理功能,其实主要是靠中断来调度的, ...
- vue+el-element中根据文件名动态创建dialog的方法
背景 在项目中使用对话框的通常做法是把对话框封装成组件,在使用的地方引入,然后添加到template,使用visible.sync控制对话框的显示/隐藏,监听confirm事件处理用户点击确定.如下: ...
- Spring中常见的bean创建异常
Spring中常见的bean创建异常 1. 概述 本次我们将讨论在spring中BeanFactory创建bean实例时经常遇到的异常 org.springframework.beans.fa ...
- MAPINFO中利用GridMaker工具创建栅格图层
在工作中需要使用栅格地图,以往都是由研发人员来创建,今天偶然发现Mapinfo中有GridMaker这样一个工具,结合网络搜索自己试了一下,居然做成功了,这里把步骤记录下来,方便以后查看. 1.首先在 ...
- access中根据一个表创建另一个
access中根据一个表创建另一个 SELECT * INTO newTableFROM zD_qlr; SELECT * into mdFROM zd IN 'E:\fz\高阳\大姚\fz\bz\b ...
- 从ACM中删除一个已经创建的Library
从ACM中删除一个已经创建的Library,无法通过界面操作,须要手工从DB中删除.须要删除的表记录有: RECENTUPDATE 找到字段Name等于该libraryName的那条记录删除掉 del ...
- 彻底抛弃PeopleEditor,SharePoint中利用Jquery Chosen创建新的人员选择器
彻底抛弃PeopleEditor,SharePoint中利用Jquery Chosen创建新的人员选择器 基于SharePoint平台开发时,人员选择器使用频率是非常高的,但是原生的人员选择器使用太麻 ...
- Qt中利用QTime类来控制时间,这里简单介绍一下QTime的成员函数的用法:
Qt中利用QTime类来控制时间,这里简单介绍一下QTime的成员函数的用法: ------------------------------------------------------------ ...
随机推荐
- Android 测试之Monkey
一.什么是Monkey Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进 ...
- elasticsearch6.6.0安装配置及elasticsearch-head插件安装
一.最小化安装centos7.6 cat /etc/redhat-release 二.配置网络,可以上外网 三.安装常用命令工具,修改系统时区,校对系统时间,关闭selinux,关闭firewalld ...
- Codeforces Round #550 (Div. 3) E. Median String (模拟)
Median String time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- PAT甲题题解-1006. Sign In and Sign Out (25)-找最小最大
判断哪个人最早到,哪个人最晚走水,就是找最大值最小值 #include <iostream> #include <cstdio> #include <algorithm& ...
- PAT甲题题解-1071. Speech Patterns (25)-找出现最多的单词
分割字符串的用法+map映射给出input中出现次数最多的单词,如果次数相同,给出按字典序最小的. 这里我用了自定义分隔符来读取字符串,方法如下: //按照定义的分隔符d来分割字符串,对str进行读取 ...
- python引入pytesseract报错:ValueError: Attempted relative import in non-package
http://blog.csdn.net/yifengfuxue/article/details/79015651
- Java运算符、switch、数组、排序
1.Java的运算符,分为四类:算数运算符.关系运算符.逻辑运算符.位运算符 运算符例子:22.25(十进制转化为二进制,8421码)0010 0010 (22)0010 0101 (25) 位运算符 ...
- (Alpha)Let's-个人贡献分
Alpha阶段个人贡献分如下: (1201)林珣玙 60 (1190)康家华 55 (1194)刘彦熙 53 (1168)仇栋民 48 (1183)马瑶华 42 (1222)张启东 42
- Django 图片上传、存储与显示
参考博客:http://www.cognize.me/2016/05/09/djangopic 开始之前要先安装python图像处理库:pip install --use-wheel Pillow 一 ...
- asp、asp.net、.aspx、.ascx、.ashx的简单说明
ASP是动态server页面(Active Server Page)的英文缩写.[1]是微软公司开发的取代CGI脚本程序的一种应用.它能够与数据库和其他程序进行交互,是一种简单.方便的编程工具.ASP ...