[問題] 殘影 重繪

作者: enher (搗蛋三帥)   2015-05-05 23:25:23
小弟最近遇到一個問題
想請問看看有沒有人也遇過 有方式解決的
大致上是有一個固定大小的Panel_A
在程式內利用迴圈產生許多相同的usercontrol(假設有50個))
放進Panel_A內 並用一個List<UserControl>來管理這些
每個UserControl內有一個panel 並且讀取某張圖片放入BackgroundImage
然後滑鼠在Panel_A上做 MouseDown + MouseMove的行為
在Panel_A的MouseMove觸發時判斷滑鼠左右位移的量
來改變每個usercontrol的location
現象就類似在拖拉這些Image
但數量一多(大約十幾個就會)移動時就可感受到拖拉時有殘影的感覺
或是拖拉後停止時 圖片有瞬間被掃過的刷新感
我目前掌握到的資訊:
網路大多都是設置DoubleBuffer的方法
也有試過SuspendLayout 和ResumeLayout
但還是會有該現象 只是嚴重與否
也試過每次移動時呼叫refresh invalid update等方式
但refresh因為會立即重繪,使得拖拉操作感變慢 產生拖拉到定位才刷新的錯覺
另外兩個方式雖不造成變慢 但殘影的感覺仍略微嚴重
故此想上來請問是否有更好的解決方式
我目前的想法是找尋
更改location時,不要重繪usercontrol內的panel或是該usercontrol
因為圖片並無改變大小
希望有類似經驗的人能夠提供一些方法 或是一些方向來討論
感謝各位
作者: KanoLoa (卡)   2015-05-05 23:30:00
最簡單的方法,換強一點的硬體釜底抽薪的辦法,預設繪圖不要用,全部自己畫...然後wpf這方面的優化作比較好..
作者: enher (搗蛋三帥)   2015-05-05 23:41:00
自己畫的意思是註冊panel的paint事件?在該事件內利用graphic.drawimage將檔案畫在panel上嗎?WPF我是很想用的 但是....目前無法這麼做...
作者: neo5277 (I am an agent of chaos)   2015-05-06 00:11:00
doevent?
作者: KanoLoa (卡)   2015-05-06 17:43:00
是啊,就跟做遊戲是一樣的...
作者: Litfal (Litfal)   2015-05-07 23:59:00
不要用control,全部自己畫XD

Links booklink

Contact Us: admin [ a t ] ucptt.com