天天看點

.Net Micro Framework研究—繪圖

試驗平台:.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,如下圖所示

.Net Micro Framework研究—繪圖

模闆自帶的代碼,是一個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 MFWindow

{

    public class Program : Microsoft.SPOT.Application

    {

        public static void Main()

        {  

            //建立窗體

            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);

            }

        }

    }

}           

程式運作後的畫面如下:

.Net Micro Framework研究—繪圖

如上面代碼中的注釋所示,DrawEllipse、DrawLine、DrawPolygon函數對刷子填充和pen的寬度都不支援,目前僅最簡單的DrawRectangle函數實作的最好,這說明微軟的SDK還是很不完善的,就像序列槽操作僅支援波特率修改,而不支援奇偶校驗、資料位修改一樣。估計微軟推出SDK3.0或SDK4.0的時候,我想.Net Micro Framework才是成熟的時候。

繼續閱讀