叶帆工作室

嵌入式开发爱好者(十年开发经验,精通C/C++/VC/VB/C#...)

刘洪峰ID:yefanqiu
504437次访问,排名80好友0人,关注者137
微软MVP / CSDN 2008十大MVB/MSDN中文技术论坛版主
yefanqiu的文章
原创 215 篇
翻译 0 篇
转载 3 篇
评论 1057 篇
叶帆的公告
本博客原创文章,作者保留一切权利,需经作者同意后方可转载,转载时 请注明[叶帆工作室]及文章链接。yefan@vip.sina.com
【简介】叶帆[微软MVP]
【文章】叶帆文章列表
【软件】叶帆共享软件列表
最近评论
yefanqiu:知道这个软件,不过更深层次知识我目前也不清楚。
吴为仁:请问你熟悉神奇的Reflector软件吗?用它可以得到.NET的源码。请问Reflector输出的源码与真正的源码有什么区别?要注意那些问题?您这个MVP写一点此方面的东西,可否?
yefanqiu:在C#上直接调用该控件吧。
yefanqiu:这是支持两种不同字符集的函数(ANSI/Unicode)
jingang123gz:我用C#怎么写代码捏???
文章分类
收藏
    相册
    叶帆照片
    【叶帆软件】
    [01]VB源码之友(V2.1.548)
    [02]API浏览器.net(V5.0)
    [03]叶帆成语词典(V2.0.8)
    [04]叶帆密码库(V1.2.8)
    【叶帆资源】
    DAO 2.0引擎
    叶帆快速通道
    Windows Embedded 专题
    中文MSDN
    叶帆圈子--工业自动化
    叶帆工作室(博客园)
    叶帆工控--工业自动化
    叶帆群组--工业应用开发
    微软中文技术论坛
    瑞康社区论坛
    叶帆友情链接
    张欣
    枕善居
    莫依
    葛涵涛
    郑建
    陈辉
    马宁
    马骐
    魏涛序
    黎波
    存档
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 .Net Micro Framework研究—绘图收藏

    新一篇: .Net Micro Framework研究—Shapes命名空间 | 旧一篇: .Net Micro Framework研究—中文显示

    试验平台:.Net Micro Framework 模拟器

     

    目前在VS2005的环境里,还不支持.Net Micro Framework界面的所见即所得绘制,界面制作有三种方式,一是窗体直接绘图,二是Panel+形状对象、三是窗体+控件。第一种做法让人觉得又回到了DOS时代,回到了SCREEN 1216色的世界里。

     

    窗体当前仅能层现一个控件,用Window.Child属性去赋值

    支持的控件主要有PanelListboxImageText等,其中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 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);

                }

            }

        }

    }

    程序运行后的画面如下:

     

    如上面代码中的注释所示,DrawEllipseDrawLineDrawPolygon函数对刷子填充和pen的宽度都不支持,目前仅最简单的DrawRectangle函数实现的最好这说明微软的SDK还是很不完善的,就像串口操作仅支持波特率修改,而不支持奇偶校验、数据位修改一样。估计微软推出SDK3.0SDK4.0的时候,我想.Net Micro Framework才是成熟的时候。

     

     

    发表于 @ 2007年11月05日 20:33:00|评论(loading...)|编辑

    新一篇: .Net Micro Framework研究—Shapes命名空间 | 旧一篇: .Net Micro Framework研究—中文显示

    评论

    #lwj3025 发表于2007-11-24 02:27:27  IP: 172.188.69.*
    两款csdn博客模版
    http://blog.csdn.net/lwj3025/archive/2007/04/27/1587812.aspx
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 叶帆