关于控件Paint时的一些体会

原创 2006年06月18日 00:46:00

     最近在把以前的一个MFC控件转移到dotNet上。在写Paint事件时需要使用大量大幅的图片的合成、动态GIF、描边字,半透明阴影等。这是我第一次大量接触GDI+,感觉的确比传统GDI要强大好多。但毕竟是刚刚接触,在使用中也遇到了不少的麻烦。特此在这里慢慢总结一下,留个纪念,以便以后的的查阅。如有不对之处还望见谅并指出。

 1、关于双缓冲

    由于有大量的大幅图片的合成和艺术字体的绘制,如果直接在Paint里绘制按以前MFC的经验肯定要刷屏的。那么条件反射就是要用双缓冲。察看Framework的SDK,没有明确的提到。没办法,只好自己摸索。现在的我得到的办法是用。

     建立全局变量 Dim bufBitmap as Bitmap     Dim BufG as Graphics  用于双缓冲使用

     在Form_Load时 建立等同于窗体或控件大小的Bitmap缓冲:  eg:   bufBitmap = new BitMap(me.width,me.heigh)

     在Form_ReSize时   跟新bufBitmap的大小   

        eg:   bufBitmap.dispose()  

                 bufBitmap = Nothing

                 bufBitmap = new BitMap(me.width,me.heigh)

     在Form_Paint时  根据bufBitmap 建立容器  BufG  = Graphics.FromImage(imageFile)

     接着在BufG上绘制所有的图形,最有 在窗口或空间自己的Graphics.DrawImage(bufBitmap,0,0)

 

2、关于即使使用双缓重也会发生刷屏的问题

    原本以为使用了双缓冲就没有刷屏了,没想到在快速的更新控件时还是发生了刷屏的问题。

    怎么回事? 啊!忘了。原来在MFC时,还要终止Form的背景擦除事件。可是一开始没在Form的事件
里找到这个事件。难道是微软忘了?不太可能。继续找........... 结果找到了。原来微软把背景擦除事件作为Overrides了。完整的SDK描述是

Protected Overridable Sub OnPaintBackground( _
   ByVal
pevent As PaintEventArgs _
)

现在只要实现该Overridable 不要在事件里填写任何代码,就屏蔽了背景擦除事件。对!就这么简单

还有,查找过程中我找到了一个超有用的事件

Protected Overridable Sub WndProc( _
   ByRef
m As Message _
)

可能直接从C#等语言开始写程序的人并不了解这个函数,但只要写过纯C或MFC Win32的人一定会对它很亲切的.

今天就写到这里,其他的一些想法,以后慢慢在补.欢迎大家一起讨论.

附: 一个练习GDI+的小程序.还没有完全完成.(春丽GiF动画会跟随鼠标,完全GDI+绘制所用界面)

下载:  GDI+的小程序

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

自定义View时,用到Paint Canvas的一些温故,自定义Loading控件(动画五,“六边形”的旋转跳跃)

转载请注明出处:王亟亟的大牛之路最近的一系列文章都是些的自定义控件的绘制,动画等效果,这一片就直接做一个自定义view,上一篇的地址:http://blog.csdn.net/ddwhan0123/a...

通过canvas和paint工具并继承view类自定义控件举例

首先创建主活动: public class CompassViewActivity extends Activity { /** Called when the activity is fi...

自定义控件三部曲之绘图篇(十)——Paint之setXfermode(一)

一、GPU硬件加速1、概述GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。与CPU不同,GPU是专门为处理图形任务而产生的芯片。 在GPU出现之前,CPU一直负...

Android 自定义控件-Canvas和Paint绘图详解-手把手带你绘制一个时钟.

1,Android - Paint基础在自定义控件时,经常需要使用canvas、paint等,在canvas类中,绘画基本都是靠drawXXX()方法来完成的,在这些方法中,很多时候都需要用到pain...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)