【物聯網智能網關-04】WinForm for .NET MF 功能一覽


 .Net Micro Framework界面開發官方標准功能僅支持WPF方式,並且所謂的WPF開發和Windows平台上的WPF有很大的區別,即不支持可視化界面設計,也不支持XML方式界面格式定義,另外提供的控件也很少,又不含事件處理,所以使用上相對繁瑣,需要自己寫很多額外代碼。

於是我在2009年底,自行開發了System.Windows.Froms庫,相關內容可以參見我當時所寫的博客文章《開源System.Windows.Forms庫,讓.Net Micro Framework界面開發和上位機一樣簡單》。2010年5月份所寫的那篇《RFID技術在.Net Micro Framework中的應用》博文中所顯示的演示界面,就是用System.Windows.Froms庫開發的。

后來基於Cortex-M3(STM32F103)內核移植了.NET Micro Framework系統,由於STM32F103的芯片主頻較低(72M),運行WPF和System.Windows.Froms庫比較吃力(而以前的.NET MF板子大部分都是原來WINCE的開發板,主頻和資源比較豐富,所以無論運行WPF還是System.Windows.Froms庫都是蠻流暢的)。所以system.Windows.Froms庫開發完畢后,做了幾個Demo后,基本上就擱置了。另外又重新花時間開發了輕量級的界面開發庫TinyGUI(相關博文請參見《【玩轉.Net MF–06】為Cortex-M3打造輕量級TinyGUI》)。

M3系統升級到STM32F207后,主頻提升為120M,運行WPF和System.Windows.Froms庫基本上問題不大了,所以對原先的System.Windows.Froms庫又進行了升級改進。

以前的System.Windows.Froms庫主要模仿WINCE界面開發的,需要用觸摸筆才能操作,目前這種操作方式早就淘汰了,所以為了支持手指直接操作,主要從以下幾個方面入手進行了改造。

(1)、重新編寫了軟鍵盤,支持手指單擊輸入;

(2)、默認字體由原來的12變為16,為了便於操控,控件也進行了擴大處理;

(3)、去掉了任務欄;

(4)、去掉任務菜單;

(5)、窗體界面大小覆蓋全屏;

控件簡介

System.Windows.Form目前包括Button、TextBox、ListBox、ComboBox、CheckBox、GroupBox、RadioButton、PictureBox、ProgressBar、VScrollBar、HScrollBar等11種常用控件,此外還提供了MessageBox方法,使用方法和Windows平台的winform保持一致。

包含兩類窗體、普通窗體及模式窗體,含義和windows平台相同。

 

軟鍵盤簡介

 

軟鍵盤一共四個不同界面,通過上面的功能鍵進行切換。

目前還不支持中文輸入。

Graphics類簡介

如果用戶比較喜歡重載OnPaint用Graphics類進行編程,那么和在windows或wince編程中的體驗完全一樣。不僅如此Graphics類還擴展了一些函數,比如支持圖片透明、漸變、圓角矩形繪制等等方法。

Graphics類的聲明如下:

    public sealed class Graphics : Microsoft.SPOT.DispatcherObject, IDisposable

    {

        public bool EmptyClipRect;

 

        public Graphics(Bitmap bmp);

        public Graphics(int width, int height);

 

        public Bitmap Bitmap { get; }

        public Rectangle Clip { get; set; }

        public int Height { get; }

        public int Width { get; }

 

        public void BlendImage(Bitmap source, int destinationX, int destinationY, int sourceX, int sourceY, int sourceWidth, int sourceHeight, ushort opacity);

        public void Clear(Color color);

        public static Size ComputeTextExtent(string text, Font font);

        public static Size ComputeTextExtent(string text, Font font, int availableWidth);

        public void Dispose();

        public void DrawEllipse(Pen pen, Rectangle rect);

        public void DrawEllipse(Pen pen, int x, int y, int width, int height);

        public void DrawImage(Bitmap image, int x, int y);

        public void DrawImage(Bitmap image, int destinationX, int destinationY, int sourceX, int sourceY, int sourceWidth, int sourceHeight);

        public void DrawLine(Pen pen, int x0, int y0, ushort Data);

        public void DrawLine(Pen pen, int x0, int y0, int x1, int y1);

        public void DrawPolygon(Pen pen, Point[] points);

        public void DrawPolygon(Pen pen, Point[] points, bool Sealed);

        public void DrawRectangle(Pen pen, Rectangle rect);

        public void DrawRectangle(Pen pen, int x, int y, int width, int height);

        public void DrawRoundRect(Pen pen, Rectangle rect, int rx, int ry);

        public void DrawRoundRect(Pen pen, int x, int y, int width, int height, int rx, int ry);

        public void DrawString(string s, Font font, Brush brush, Rectangle rect);

        public void DrawString(string s, Font font, Brush brush, int x, int y);

        public void DrawString(string s, Font font, Brush brush, Rectangle rect, StringFormat format);

        public void FillEllipse(Brush brush, Rectangle rect);

        public void FillEllipse(Brush brush, int x, int y, int width, int height);

        public void FillPolygon(Brush brush, Point[] points);

        public void FillRectangle(Brush brush, Rectangle rect);

        public void FillRectangle(Brush brush, int x, int y, int width, int height);

        public void GetTranslation(out int x, out int y);

        public void ResetClip();

        public void RotateImage(int angle, int destinationX, int destinationY, Bitmap bitmap, int sourceX, int sourceY, int sourceWidth, int sourceHeight, ushort opacity);

        public void Scale9Image(int xDst, int yDst, int widthDst, int heightDst, Bitmap bitmap, int leftBorder, int topBorder, int rightBorder, int bottomBorder, ushort opacity);

        public void SetPixel(Color color, int x, int y);

        public void StretchImage(int xDst, int yDst, int widthDst, int heightDst, Bitmap bitmap, int xSrc, int ySrc, int widthSrc, int heightSrc, ushort opacity);

        public void TileImage(int xDst, int yDst, Bitmap bitmap, int width, int height, ushort opacity);

        public void Translate(int dx, int dy);

    }

界面設計簡介

由於.Net Micro Framework的IDE開發環境並不支持所見即所得的窗體設計功能,所以我們可以用.Net Framework和.Net Compact Framework開發環境設計窗體,然后把相關窗體文件(如Form1.cs和Form1.designer.cs文件)直接導入到.Net Micro Framework工程中,稍加刪減即可為.Net Micro Framework所用。

   

(window 控件的字體可以設置為:字體"Arial"  大小11.25F,這種字體和底層設備的字體大小比較接近 )

關於字體庫

由於字體文件相對較大,所以YFSoft.Font庫文件是全開源的,用戶可以根據需要自行定義字體,設置好進行編譯,替換系統所提供的YFSoft.Font.*文件即可。

public Font(string name, float emSize, FontStyle style)

        {

            switch (this._name)

            {

                default:

                case "Arial":

                    switch (style)

                    {

                        //case FontStyle.Bold:

                        //_value =  YFResource.GetFont(YFResource.FontResources.YFArial16B);

                        //break;

                        default:

                        case FontStyle.Regular:

                            _value = YFResource.GetFont(YFResource.FontResources.YFArial16);

                            break;

                    }

                    break;              

            }

            this._size  = emSize;

            this._style = style;

        }

根據需要上述代碼進行必要的調整,理論上可以支持任意字體了。

關於.NET MF字體如何定制,請參見我以前寫的博文《.Net Micro Framework研究—中文顯示》和《.Net Micro Framework研究—Tinyfnt字體研究》。

字體工具下載:http://www.sky-walker.com.cn/MFRelease/Tools/YFTFConvert.rar

未來發展規划

(1)、采用組態軟件進行界面設計,並自動生成界面相關的代碼。

(2)、再擴展幾個工業用控件,比如動態曲線,表格,儀表盤顯示等等。

 

演示視頻

視頻播放地址:http://v.youku.com/v_show/id_XNDI2NzM4Mjk2.html

從演示效果上看,添加比較多的控件,性能還不盡人意。不過這是基於STM32F207(主頻120M)測試的,后續采用STM32F407(主頻168M)的芯片,性能會有比較大的改善(當然本框架從軟件角度還會繼續進行性能優化),想以前在STM32F103(主頻72M)芯片上,這個框架根本跑步起來。期待ST推出性能更強大的Cortex-M3或Cortex-M4芯片。

當然如果你需要在當前平台,界面跑得更快,那只有先選擇TinyGUI了,不過在寫代碼上,您自己得多下點功夫了。

 

下載地址:http://www.sky-walker.com.cn/MFRelease/library/V42/YFSoft.WinForm.rar

MF簡介:http://blog.csdn.net/yefanqiu/article/details/5711770

MF資料:http://www.sky-walker.com.cn/News.asp?Id=25

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM