試驗平台:.Net Micro Framework 模擬器
目前在VS2005的環境裡,還不支持.Net Micro Framework界面的所見即所得繪制,界面制作有三種方式,一是窗體直接繪圖,二是Panel+形狀對象、三是窗體+控件。第一種做法讓人覺得又回到了DOS時代,回到了SCREEN 12的16色的世界裡。
窗體當前僅能層現一個控件,用Window.Child屬性去賦值。
支持的控件主要有Panel、Listbox、Image、Text等,其中Panel可包含多個子控件。
支持的形狀對象主要有Ellipse,Line,Polygon,Rectangle等。
支持的繪圖函數主要有:
DrawEllipse,DrawImage,DrawLine,DrawPolygon,DrawRectangle,DrawText,SetPixel;
本篇內容主要介紹窗體直接繪圖,其他相關內容在後面的篇章裡陸續介紹。
1、新建項目,請選擇window Application,如下圖所示
模板自帶的代碼,是一個window窗體上包含一個Text控件,控件顯示的內容就是:Hello World!
2、窗體直接繪圖
當前工程,除資源和引用外,其他的代碼都可以刪除,取而代之的是下面的代碼,我嘗試用最簡單的代碼,來表現MF的繪圖能力。
using System;
using Microsoft.SPOT;
using Microsoft.SPOT.Input;
using Microsoft.SPOT.Presentation;
using Microsoft.SPOT.Presentation.Controls;
using Microsoft.SPOT.Presentation.Media;
namespace MFWind
ow{
public class Program : Microsoft.SPOT.Application
{
public static void
{
//創建窗體
WindowsDrawing win = new WindowsDrawing();
win.Width = SystemMetrics.ScreenWidth;
win.Height = SystemMetrics.ScreenHeight;
//程序運行
new Program().Run(win);
}
//從Window派生一個類,重載OnRender方法
internal sealed class WindowsDrawing :Window
{
public override void OnRender(DrawingContext dc)
{
Color c = ColorUtility.ColorFromRGB(128, 0,255);
Brush b = new SolidColorBrush(c);
Pen p = new Pen(c);
//繪制背景(繪矩形)
dc.DrawRectangle(b, p, 0, 0, Width, Height);
//繪橢圓(刷子無效)
b = new SolidColorBrush(Color.White);
p=new Pen(Color.Black);
dc.DrawEllipse(b, p, 40,20, 40,20);
//繪線(線的粗細參數無效)
p = new Pen( ColorUtility.ColorFromRGB(255, 0,0),5);
dc.DrawLine(p, 40, 20, 100,80);
//繪矩形(刷子有效,線寬有效)
b = new SolidColorBrush(Color.White);
p = new Pen(Color.Black,4);
dc.DrawRectangle(b, p, 80, 60, 100, 80);
//繪多邊行(刷子無效)
int[] points = { 10, 230, 30, 210, 0, 180, 30, 130, 50, 130, 80, 180, 50, 210, 70, 230 };
b = new SolidColorBrush(Color.White);
p = new Pen(ColorUtility.ColorFromRGB(0, 255,0),3);
dc.DrawPolygon(b,p, points);
//寫文字
c= ColorUtility.ColorFromRGB(0, 255, 255);
dc.DrawText("http://blog.csdn.Net/yefanqiu", Resources.GetFont(Resources.FontResources.small), c, 180, 20);
//繪制位圖(支持bmp,gif,jpg,png等等圖片)
dc.DrawImage(Resources.GetBitmap(Resources.BitmapResources.YFMSMVP),230,130);
}
}
}
}
程序運行後的畫面如下:
如上面代碼中的注釋所示,DrawEllipse、DrawLine、DrawPolygon函數對刷子填充和pen的寬度都不支持,目前僅最簡單的DrawRectangle函數實現的最好,這說明微軟的SDK還是很不完善的,就像串口操作僅支持波特率修改,而不支持奇偶校驗、數據位修改一樣。估計微軟推出SDK3.0或SDK4.0的時候,我想.Net Micro Framework才是成熟的時候。