国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

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

2024-07-10 13:00:22
字體:
來源:轉載
供稿:網友
在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



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐陵市| 德格县| 清水河县| 鹤岗市| 达州市| 壤塘县| 田林县| 息烽县| 揭阳市| 遂宁市| 石泉县| 荥阳市| 甘谷县| 曲阳县| 赣榆县| 信阳市| 民权县| 伊春市| 玉门市| 万山特区| 吉安县| 永年县| 南郑县| 太和县| 桃江县| 子长县| 西安市| 盖州市| 政和县| 齐齐哈尔市| 潮安县| 含山县| 浙江省| 桐庐县| 嘉义县| 卓资县| 浦北县| 朔州市| 玉树县| 盖州市| 城口县|