非常着急!用过Win32 API函数bitblt的进来,问一下用Bitblt解决绘图闪烁的问题(不使用.net的双缓冲)
由于我使用C#编写一个wince下的绘图应用程序,因为.net Compact Framework不支持双缓冲,所以只能使用bitblt API来解决绘图闪烁的问题。但是使用之后屏幕没有出现预想中的图形,而是黑屏。代码如下:[DllImport(@"gdi32.dll")]
public static extern int BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop);
const uint SRCCOPY = 0xCC0020;
private void pnlECG_Paint(object sender, PaintEventArgs e)
{
Bitmap bmpLines = new Bitmap(800, 500);
Graphics grfx = Graphics.FromImage(bmpLines);
Pen SquarePen = new Pen(Color.Blue);
//下面是一些绘制曲线的代码
grfx.DrawLines(SquarePen , points);//points为准备好的Point曲线数组
.................................................
//绘图代码结束
IntPtr DC1 = e.Graphics.GetHdc();
IntPtr DC2 = grfx.GetHdc();
BitBlt(DC1, 0, 0, 800, 500, DC2, 0, 0, SRCCOPY);
e.Graphics.ReleaseHdc(DC1);
grfx.ReleaseHdc(DC2);
//e.Graphics.DrawImage(bmpLines, 0, 0);//不使用bitblt之前的帖图代码,工作正常
bmpLines.Dispose();
grfx.Dispose();
SquarePen.Dispose();
brush.Dispose();
} --------------------编程问答-------------------- 没搞过,帮你顶一下. --------------------编程问答-------------------- 谢谢 发现pictureBox似乎默认是开着双缓冲的 看来用Panel本身就是个错误 --------------------编程问答-------------------- 到wince平台测试正常,但是屏幕闪烁还是很厉害,不知道什么原因,妈的 --------------------编程问答-------------------- 没用过,帮顶了。。 --------------------编程问答-------------------- IntPtr DC1 = e.Graphics.GetHdc();
-----------------------------------------------------------------
DC1 里没有图像 当然是黑色的
--------------------编程问答-------------------- 楼上的兄弟 DC1是目标DC 需要原来就有图像?
显示黑屏的程序到了wince上就能显示出来了 但是速度不敢恭维,能看到屏幕被一刷一刷的(原图象-》默认背景色-》新图像) --------------------编程问答-------------------- 这个不知道对你有没有用
http://blog.csdn.net/wzuomin/archive/2007/07/17/1695152.aspx --------------------编程问答-------------------- 谢谢楼上的兄弟 其实有用。。。
补充:.NET技术 , C#