C# WINCE 下如何实现双缓冲绘图

时间:2021-09-08 07:35:25
网上搜到的几个例子,发现都没有对应的API实现。
关键是如何建立一个新的Graphics实力,或者其他可以绘图的对象,好画上。也没有发现有人说的doublebuffer的属性开关。

8 个解决方案

#1


双缓冲的实现,与PC 上是一样一样的

#2


引用 1 楼 91program 的回复:
双缓冲的实现,与PC 上是一样一样的


我查找到部分API,建立一个Image,在Image上绘图。然后把Image会知道Paint()里面。
发下在没有Onpaint调用之前,系统都会自动吧背景刷黑。这样不管我用什么方法,在每次绘图前都要变黑一下,效果很不好。

#3


Bitmap bmp;
Graphics backGroundGraph;

bmp = new Bitmap( this.ClientSize.Width, this.ClientSize.Height );
backGroundGraph.Clear( Color.Black );
showAsBar( backGroundGraph ); // My render function
private void OnPaint ( object sender, PaintEventArgs e ) {
        if (bmp != null) {
              e.Graphics.DrawImage( bmp, 0, 0 );
           }            
            //base.OnPaint( e );  
        }

#4


前面代码,是在其他函数里面,我拷贝出来的。

Opaint只用来刷新这个背景图片。

我单步调试发现:在进去Onpaint之前,系统会自动把系统显存清理成黑色;之后我在绘制。最终效果就是黑色纯色,和我画的图片非常快的交替显示。

有方方法取消这个清空显存吗?

#5


引用 4 楼 xtting_8984313 的回复:
前面代码,是在其他函数里面,我拷贝出来的。

Opaint只用来刷新这个背景图片。

我单步调试发现:在进去Onpaint之前,系统会自动把系统显存清理成黑色;之后我在绘制。最终效果就是黑色纯色,和我画的图片非常快的交替显示。

有方方法取消这个清空显存吗?


处理一下 WM_ERASEBACKGROUD 这个消息

#6


引用 5 楼 91program 的回复:
Quote: 引用 4 楼 xtting_8984313 的回复:

前面代码,是在其他函数里面,我拷贝出来的。

Opaint只用来刷新这个背景图片。

我单步调试发现:在进去Onpaint之前,系统会自动把系统显存清理成黑色;之后我在绘制。最终效果就是黑色纯色,和我画的图片非常快的交替显示。

有方方法取消这个清空显存吗?


处理一下 WM_ERASEBACKGROUD 这个消息


有点感觉,但是还不太明白。初次接触C#,以前也很少做桌面程序。
我看VS2008 自动GUI里面,是吧OnPaint注册为一个HANDULER,你说的这个也类似吧?

this.pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler( this.OnPaint );

我找遍了,里面的handleer,没有发现相似的。有例子吗?

#7


虽然没有直接答案,版主给了足够提示,着了好几个小时才找到对应的方法。

#8


背景重绘好像是在OnPaintBackground里,我的控件闪烁问题重载OnPainBackground后就不闪烁了

#1


双缓冲的实现,与PC 上是一样一样的

#2


引用 1 楼 91program 的回复:
双缓冲的实现,与PC 上是一样一样的


我查找到部分API,建立一个Image,在Image上绘图。然后把Image会知道Paint()里面。
发下在没有Onpaint调用之前,系统都会自动吧背景刷黑。这样不管我用什么方法,在每次绘图前都要变黑一下,效果很不好。

#3


Bitmap bmp;
Graphics backGroundGraph;

bmp = new Bitmap( this.ClientSize.Width, this.ClientSize.Height );
backGroundGraph.Clear( Color.Black );
showAsBar( backGroundGraph ); // My render function
private void OnPaint ( object sender, PaintEventArgs e ) {
        if (bmp != null) {
              e.Graphics.DrawImage( bmp, 0, 0 );
           }            
            //base.OnPaint( e );  
        }

#4


前面代码,是在其他函数里面,我拷贝出来的。

Opaint只用来刷新这个背景图片。

我单步调试发现:在进去Onpaint之前,系统会自动把系统显存清理成黑色;之后我在绘制。最终效果就是黑色纯色,和我画的图片非常快的交替显示。

有方方法取消这个清空显存吗?

#5


引用 4 楼 xtting_8984313 的回复:
前面代码,是在其他函数里面,我拷贝出来的。

Opaint只用来刷新这个背景图片。

我单步调试发现:在进去Onpaint之前,系统会自动把系统显存清理成黑色;之后我在绘制。最终效果就是黑色纯色,和我画的图片非常快的交替显示。

有方方法取消这个清空显存吗?


处理一下 WM_ERASEBACKGROUD 这个消息

#6


引用 5 楼 91program 的回复:
Quote: 引用 4 楼 xtting_8984313 的回复:

前面代码,是在其他函数里面,我拷贝出来的。

Opaint只用来刷新这个背景图片。

我单步调试发现:在进去Onpaint之前,系统会自动把系统显存清理成黑色;之后我在绘制。最终效果就是黑色纯色,和我画的图片非常快的交替显示。

有方方法取消这个清空显存吗?


处理一下 WM_ERASEBACKGROUD 这个消息


有点感觉,但是还不太明白。初次接触C#,以前也很少做桌面程序。
我看VS2008 自动GUI里面,是吧OnPaint注册为一个HANDULER,你说的这个也类似吧?

this.pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler( this.OnPaint );

我找遍了,里面的handleer,没有发现相似的。有例子吗?

#7


虽然没有直接答案,版主给了足够提示,着了好几个小时才找到对应的方法。

#8


背景重绘好像是在OnPaintBackground里,我的控件闪烁问题重载OnPainBackground后就不闪烁了