叶帆工作室

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

刘洪峰ID:yefanqiu
518707次访问,排名80好友0人,关注者161
微软MVP / CSDN 2008十大MVB/MSDN中文技术论坛版主
yefanqiu的文章
原创 216 篇
翻译 0 篇
转载 3 篇
评论 1077 篇
叶帆的公告
本博客原创文章,作者保留一切权利,需经作者同意后方可转载,转载时 请注明[叶帆工作室]及文章链接。yefan@vip.sina.com
【简介】叶帆[微软MVP]
【文章】叶帆文章列表
【软件】叶帆共享软件列表
最近评论
findg:今天我看见这个网站:http://www.diybl.com/course/6_system/linux/Linuxjs/2007921/72422.html转载了该篇文章,但没有注明文章来源。
dasheng:应该怎样建立监测串口接收数据事件的线程呢。还请指教。
andy:可以给我发一份Dotnet Framework的ppt么?
My E-Mail:caozhongshuai_andy@163.com
真的非常感谢!
@:我防火墙是关了的为撒也还有这情况呢?
superpope1216:叶老师
现在我要用C# 2005开发一个windows mobile 蓝牙打印的功能,请问又什么方法吗?
因为我对蓝牙通信的原理是通过串口什么的不太清楚
还又是否需要调用API函数?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

    原创 WinCE 4.2(.net精简框架集)下的图形双缓存处理收藏

    新一篇: 用EasyHMI做的工程示例一览 | 旧一篇: 嵌入式EasyHMI V0.1版终于推出,C#真是软件开发的利器

          在上位机Windows操作平台( .net 2.0框架集)下实现图形双缓存有很多办法,每种办法在上位机都有很好的效果,但是很不幸,在WinCE4.2操作系统(.net 2.0精简框架集)下这些方法要么不支持,要么效果很差(还是闪烁的厉害)。

    在上位机中,一般都有这么几种办法:

    1、应用程序中使用双缓冲的最简便的方法是使用 .NET Framework 为窗体和控件提供的默认双缓冲,通过将 DoubleBuffered 属性设置为True即可。

    2、通过SetStyle修改控件属性。

     public void EnableDoubleBuffering()

    {

       // Set the value of the double-buffering style bits to true.
       this.SetStyle(ControlStyles.DoubleBuffer |
          ControlStyles.UserPaint |
          ControlStyles.AllPaintingInWmPaint,
          true);
       this.UpdateStyles();

    }

    3、比较经典的一种如下:重载OnPaint函数

    protected override void OnPaint(PaintEventArgs e)
      {

       System.Drawing.Bitmap b = new Bitmap(this.Width,this.Height);//
    双缓冲技术,先将所有要画的画在该图片中,再调用GS画出该图片
    .
       Graphics g = Graphics.FromImage((System.Drawing.Image)b);
       //
    在这里画你所需要画的

       //-------------------
       e.Graphics.DrawImage((System.Drawing.Image)b,0,0);
       g.Dispose();

       base.OnPaint (e);   
      }

         前两种办法在WinCE下都不支持,第三种办法是可以使用的,但效果不佳,还是有明显的闪烁现象。经过上网查资料和测试,发现在第三种办法基础上要进行如下处理,效果才非常完美。

       由于我是在Panel上绘的图,所以我派生了一个类EmbedPanel,重载了OnPaintBackground函数,并且置该函数为空。

        public class EmbedPanel : Panel
        {
            protected override void OnPaintBackground(PaintEventArgs paintg)
            {           
                //不绘制背景
            }
        } 

        private void pb_Paint(object sender, PaintEventArgs e)
            {
                try
                {
                    pb_Graphics.FillRectangle(new SolidBrush(BackColor), Rect);  //绘制背景
                    //--------------------------------------------------------

                    ... ... 具体的绘图代码

                    //--------------------------------------------------------
                    e.Graphics.DrawImage((System.Drawing.Image)pb_Bitmap, 0, 0);
                }
                catch (Exception err)
                {
                    ShowInfo(3000, 2, err.Message, "pb_Paint");
                }
            }

        //注:在WINCE测试时发现,在OnPaint中的写System.Drawing.Bitmap b = new Bitmap(this.Width,this.Height)代码,程序运行不长时间便会导致WinCE死机。所以我是在类的初始化中执行该代码的。

         这样一来,就很完美的在.net精简框架集下解决了绘图闪烁问题。

     

    发表于 @ 2006年11月21日 21:49:00|评论(loading...)|编辑

    新一篇: 用EasyHMI做的工程示例一览 | 旧一篇: 嵌入式EasyHMI V0.1版终于推出,C#真是软件开发的利器

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 叶帆