下载示例工程 - 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来测试。

现在我们可以开始编写我们的控制.

  1. 我们需要添加一些即将使用的 namespaces, namespace包含了我们在控制中所涉及到的类 :

    using System.ComponentModel;// Needed for control support
    
    using System.Timers; // Needed to support timer
    
    using System.Runtime.InteropServices;// Needed for StructLayout attribute 
    
  2. 下一步是包含一些允许调用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);
    
  3. 现在我们申明一些在对象运行期间将被使用的成员变量。
    private Colorm_colorHands;private Colorm_colorFace;
    
    private boolm_bActivateClock;
    
    private System.Timers.Timer m_timer;
    

    这里要注意的是,要在声明任何变量之前引入关键字,而不是像C++那样可以跟变量一起定义。

  4. 定义构造函数.

    Java类似,方法可以在内部编写,将来虽然需要经常修改,但修改变得简单易行了。

    public MyControl(){
    
     m_colorHands = Color.White;
    
     m_colorFace = Color.Blue;
    
     SetStyle(ControlStyles.Opaque, false);
    
     SetStyle(ControlStyles.ResizeRedraw, true);
    
    }
  5. 下一步是定义一些属性,这里包含了一个新的功能:属性标记,他将为其它子系统提供运行时库信息。
    [
    
    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函数。

  6. 重载基类函数
    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创建控制的更多相关文章

  1. 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, ...

  2. 痞子衡嵌入式:嵌入式MCU中通用的三重中断控制设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是嵌入式MCU中通用的三重中断控制设计. 我们知道在 MCU 裸机中程序代码之所以能完成多任务并行实时处理功能,其实主要是靠中断来调度的, ...

  3. vue+el-element中根据文件名动态创建dialog的方法

    背景 在项目中使用对话框的通常做法是把对话框封装成组件,在使用的地方引入,然后添加到template,使用visible.sync控制对话框的显示/隐藏,监听confirm事件处理用户点击确定.如下: ...

  4. Spring中常见的bean创建异常

    Spring中常见的bean创建异常 1. 概述     本次我们将讨论在spring中BeanFactory创建bean实例时经常遇到的异常 org.springframework.beans.fa ...

  5. MAPINFO中利用GridMaker工具创建栅格图层

    在工作中需要使用栅格地图,以往都是由研发人员来创建,今天偶然发现Mapinfo中有GridMaker这样一个工具,结合网络搜索自己试了一下,居然做成功了,这里把步骤记录下来,方便以后查看. 1.首先在 ...

  6. access中根据一个表创建另一个

    access中根据一个表创建另一个 SELECT * INTO newTableFROM zD_qlr; SELECT * into mdFROM zd IN 'E:\fz\高阳\大姚\fz\bz\b ...

  7. 从ACM中删除一个已经创建的Library

    从ACM中删除一个已经创建的Library,无法通过界面操作,须要手工从DB中删除.须要删除的表记录有: RECENTUPDATE 找到字段Name等于该libraryName的那条记录删除掉 del ...

  8. 彻底抛弃PeopleEditor,SharePoint中利用Jquery Chosen创建新的人员选择器

    彻底抛弃PeopleEditor,SharePoint中利用Jquery Chosen创建新的人员选择器 基于SharePoint平台开发时,人员选择器使用频率是非常高的,但是原生的人员选择器使用太麻 ...

  9. Qt中利用QTime类来控制时间,这里简单介绍一下QTime的成员函数的用法:

    Qt中利用QTime类来控制时间,这里简单介绍一下QTime的成员函数的用法: ------------------------------------------------------------ ...

随机推荐

  1. Android 测试之Monkey

    一.什么是Monkey Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进 ...

  2. elasticsearch6.6.0安装配置及elasticsearch-head插件安装

    一.最小化安装centos7.6 cat /etc/redhat-release 二.配置网络,可以上外网 三.安装常用命令工具,修改系统时区,校对系统时间,关闭selinux,关闭firewalld ...

  3. 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 ...

  4. PAT甲题题解-1006. Sign In and Sign Out (25)-找最小最大

    判断哪个人最早到,哪个人最晚走水,就是找最大值最小值 #include <iostream> #include <cstdio> #include <algorithm& ...

  5. PAT甲题题解-1071. Speech Patterns (25)-找出现最多的单词

    分割字符串的用法+map映射给出input中出现次数最多的单词,如果次数相同,给出按字典序最小的. 这里我用了自定义分隔符来读取字符串,方法如下: //按照定义的分隔符d来分割字符串,对str进行读取 ...

  6. python引入pytesseract报错:ValueError: Attempted relative import in non-package

    http://blog.csdn.net/yifengfuxue/article/details/79015651

  7. Java运算符、switch、数组、排序

    1.Java的运算符,分为四类:算数运算符.关系运算符.逻辑运算符.位运算符 运算符例子:22.25(十进制转化为二进制,8421码)0010 0010 (22)0010 0101 (25) 位运算符 ...

  8. (Alpha)Let's-个人贡献分

    Alpha阶段个人贡献分如下: (1201)林珣玙 60 (1190)康家华 55 (1194)刘彦熙 53 (1168)仇栋民 48 (1183)马瑶华 42 (1222)张启东 42

  9. Django 图片上传、存储与显示

    参考博客:http://www.cognize.me/2016/05/09/djangopic 开始之前要先安装python图像处理库:pip install --use-wheel Pillow 一 ...

  10. asp、asp.net、.aspx、.ascx、.ashx的简单说明

    ASP是动态server页面(Active Server Page)的英文缩写.[1]是微软公司开发的取代CGI脚本程序的一种应用.它能够与数据库和其他程序进行交互,是一种简单.方便的编程工具.ASP ...