【问题标题】:How to prevent Flikkering on picturebox of windows mobile如何防止windows mobile的picturebox闪烁
【发布时间】:2010-11-28 00:56:51
【问题描述】:

我在图片框上有一个透明矩形,如果我单击下一步,下一个图像会出现并绘制透明矩形。问题是闪烁,从一个图像移动到另一个图像时,透明矩形闪烁。请帮助我如何摆脱这个问题。我想消除闪烁,请帮助。

谢谢

【问题讨论】:

    标签: c# c++ windows-mobile winapi mobile


    【解决方案1】:

    你是如何实现它的?我遇到了类似的问题,并通过从 Control 继承、覆盖 OnPaint 以绘制我的图像和透明背景等以及覆盖 OnPaintBackground 并且什么都不做来实现我自己的图片框。 (OnPaintBackground 的默认行为是绘制控件的背景,如果是控制整个控件的绘制,则不需要这样做)

    如果您的绘制操作需要时间,您还可以在 OnPaint 中实现双缓冲以减少撕裂。

    【讨论】:

    • 是的,马特,你是对的.. 但问题是我不知道如何将双缓冲区设置为 windows mobile 的图片控制.. 真的我头疼老兄.. 我试过很多将双缓冲,特别是在 .net 3.5 紧凑型框架中我失败了...请让我知道如何在 .net 3.5 紧凑型框架中放置双缓冲。
    • 我使用自定义控件来完成,并自己绘制整个控件。然后,您可以分配一个与控件大小相同的位图,重写 OnPaintBackground 以不执行任何操作,重写 OnPaint 以对位图进行所有绘制,然后作为 OnPaint 中的最后一件事,将位图绘制到传入的 Graphics PaintEventArgs
    • 是的,马特,我尝试了你所说的方式,但还有一个问题来了,我有一个自定义图片框,其 sizemode = CenterImage。我已将背景色设置为黑色,并在中心显示 100*100 图像。我可以得到图片框的位图和背景吗?是这样,我怎么得到它?
    • 不确定标准图片控件,但正如我在上一条评论中所说,如果您覆盖 onpaint 然后您可以在位图黑色中填充矩形,然后在位图上绘制图像,然后只需在onpaint结束时将位图绘制到控件即可。
    • 好的.. 谢谢你,马特先生.. 会尽力回到你身边... 祝你有美好的一天:-)..
    【解决方案2】:

    做双缓冲。基本上创建了一个将显示的缓存图像。然后,当您需要重新绘制表面时,请使用另一个图像,一旦您完成绘制,将该图像与缓存的图像交换。这样你就不会有任何闪烁。

    我可以给你写一个例子,但我不知道你是在编写 c++ 还是 C#,因为你已经将两者都添加为标签。这是C#中手动双缓冲的示例http://www.developerfusion.com/code/4668/double-buffering-in-net/

    【讨论】:

    • 感谢 Qua.. 我看到了你提供的链接,基本上我们使用的是 .net compact frame work 3.5。但是我们不支持在 .net 3.5 紧凑框架中控制样式..您是否知道如何将控件样式设置为 .net 紧凑框架 3.5 的图片框?...即使您也知道c ++也文件..请让我知道-谢谢你
    • 我认为目前不支持它。这篇文章确实讨论了手动方式,并提供了代码示例。
    猜你喜欢
    • 1970-01-01
    • 2011-01-30
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 2013-08-04
    • 2014-04-29
    相关资源
    最近更新 更多