2012-04-19 83 views
2

我有,我正在绘制不同大小的矩形成千上万的应用程序。现在我在这里给出了用户选择那些矩形,我只是在该特定的矩形上绘制旋转边框...(在矩形选择上进行蚂蚁动画)。绘制GDI +图形对象

现在,如果用户选择了几个矩形比它不会产生这样的麻烦,但一旦用户选择全部或许多在同一时间,然后重新划分出闪烁效果看起来并不好,甚至不能接受的。

我想要做的它,它并行这样我就可以得到性能出来。

+0

你在一个内存DC在画什么? – 2012-04-19 05:47:56

+0

我正在为该窗口获取hwnd句柄,并从该句柄获取hDC。 – user1220402 2012-04-19 07:08:46

+0

我不确定GDI +是否喜欢多线程......使用Status :: ObjectBusy重叠调用会失败。每个线程的hDC和图形可能是最好的方法。但同样,闪烁可以通过双缓冲解决... – ActiveTrayPrntrTagDataStrDrvr 2012-04-19 09:00:49

回答

1

我建议你使用双缓冲:创建一个memory DC,在它上面绘制,然后在真正的DC上执行BitBlt。你可以在互联网上找到很多有关这种技术的例子。

您也可以参考这个MSDN文章:Flicker-Free Displays Using an Off-Screen DC

+0

没有像位图在我的app ..它只是和颜色矩形可能是千..我使用上面的函数在选定的矩形上绘制一个旋转的短划线..要这样做,我写了这个函数...它会绘制列表中存在的所有rects,所以循环旋转那些很多次。现在旋转虚线我正在改变或增加这些虚线偏移量,并重新绘制所有的东西......我在计时器(每秒调用一次这个函数)的帮助下每秒钟都这样做,这样原因我越来越远......摇曳如果u有好办法吗行军蚁(上选择矩形旋转破折号)表明,它 – user1220402 2012-04-19 10:53:38

+0

对于双缓冲,你必须创建位图和内存DC和借鉴它。然后使用BitBlt更新真正的DC。代码变化并不大,请尝试一下。 – 2012-04-19 11:42:10

+0

谢谢你的帮助..但我试过你说的情况...我在我的功能它自己(这是上面给出的)..在我的油漆方法中,双缓冲已经存在...现在我将再次澄清我的要求..该函数每秒钟绘制数千个矩形为什么bcz我想旋转所选矩形的虚线..因此它每秒钟都会绘制数千个矩形..所以我想它使它平行线程...让我知道你是否有任何想法。 – user1220402 2012-04-20 09:26:19