在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的成员函数的用法: ------------------------------------------------------------ ...
随机推荐
- 联想拯救者15-isk安装固态硬盘与系统迁移教程
一.固态选择 首先知道拯救者15-ISK是m.2接口2280尺寸,支持PCIE协议NVMe接口标准.我加装的固态是HP EX900系列250G M.2 NVMe固态硬盘. 二.开盖安装 1.拯救者15 ...
- [T-ARA][Tic Tic Toc]
歌词来源:http://music.163.com/#/song?id=22704478 Tic Tic Toc RA Tic Tic Toc RA [Tic Tic Toc RA Tic Tic T ...
- PHP学习 函数 function
参数默认值function drink($kind ='tea'){echo 'would you please a cup'.$kind.'<br>';} drink();drink(' ...
- YQCB冲刺第二周第四天
站立会议 任务看板 今天的任务为实现精准查账的功能. 昨天的任务为实现查看消费明细的功能. 遇到的问题为忘记在记账记录的表中添加用户名一栏,这样导致不同用户登录时查看消费明细会显示所有用户的所有记录.
- 每日scrum(6)
今天是小组正式冲刺的第六天,软件的各种结尾工作,还有一些模块就已经全部实现了: 遇到的问题主要是对于自己能力的担忧,以前总是想,如果自己努力,就会怎样成功,其实并不是那样,小小的距离就是很远的能力差距 ...
- 小学四则运算APP 第一个冲刺阶段 第四天
团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第一次冲刺阶段时间:11.17~11.27 本次发布我们增加了CalculatorsActivity.java.YunsuanActivi ...
- C# 7中函数多值返回_转自InfoQ
本文要点 应遵循<.NET设计规范:.NET约定惯用法与模式>一书.和十年前第一版出版时一样,书中给出的原则在当前依然有指导意义. API设计是最重要的.设计不好的API会在极大地增加软件 ...
- Python3的bytes和str之别
Python3不会以任意隐式的方式混用str和bytes,正是这使得:两者的区分特别清晰,在使用Python时不能拼接字符串和字节包,也无法搜索字节包里面的字符串(反之亦然),也不能讲字符串传入参数为 ...
- numpy 读取txt为array 一行搞定
vec = np.genfromtxt('wiki.ch.text.vector', skip_header=1, delimiter=' ', dtype=None)skip_header=1是跳过 ...
- Drools解决积分问题
http://blog.csdn.net/quzishen/article/details/6163012 http://www.cnblogs.com/ityouknow/p/7297524.htm ...