在C#中使用.NET SDK建立控制

來源:互聯網
上載者:User
建立|控制 在C#中使用.NET SDK建立控制
作者: Norm Almond




下載樣本工程 - 8 Kb


介紹
在這篇教程中,我將使用.NET架構建立一個簡單的時鐘控制樣本,這個控制是一個顯示目前時間的時鐘,
我將指導讀者實現秒針並顯示鐘點數。
文章加亮處是建立這個控制的關鍵點,讀者可以參考其中的代碼。建立一個控制的最快的方法是從這裡拷
貝一個控制範例程式碼:

..\Program Files\NGWSSDK\Samples\QuickStart\winforms\samples\Cs\WritingControls\helloworldcontrol

將目錄拷貝到 MyControl目錄

..\Program Files\NGWSSDK\Samples\QuickStart\winforms\samples\Cs\WritingControls\MyControl

將目錄下的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





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.