2012-04-19 154 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