自製TrackBar元件,移動slider時畫面閃動該何如處理.? |
缺席
|
trumpet
一般會員 發表:6 回覆:8 積分:2 註冊:2002-12-10 發送簡訊給我 |
各位大大好:
小弟在自製一個有圖形能力的TrackBar元件..
繼承自Tcustomcontrol
使用了三張圖.. 分別表示 slider 和 slider的上方部份及下方部份..
我把繪圖的工作放在 paint()中..當改變 position時便執行Invalivade();
以重繪圖..
在 .h 檔中
加入 DYNAMIC void _-fastcall MouseMove(.......
來作為用mouse移動slider事件的處理.. 當在程式中使用這個VCL時.. 若連續改變position時.. VCL圖面不會有閃動的情形 , 但是若用mouse拖slider移動時郤閃得很嚴重...
先試著把繪圖的部份移到 mousemove 的function 內,但是沒有改善
也有試過攔 WM_MOUSEMOVE 取代 mousemove 但是結果一樣..
DoubleBuffer也設了...
Paint()中 也是先設了一個bitmap將圖都畫好 , 再畫在上VCL的Canvas上..
還有 reasebkg 的message 我也拿掉了..仍無法解決//
不知有那位大大知道,可以分享如何能克服這個閃動的問題..謝謝
|
trumpet
一般會員 發表:6 回覆:8 積分:2 註冊:2002-12-10 發送簡訊給我 |
小弟已自行解決了,將心得分享一下..
1.寫OnChange的envent時,用攔WM_MOUSEMOVE的方法,會比改寫TCustomControl的OnMousemove的效率要高很多..
2.當OnChange時及Position值改變時的重繪動作,最好是自行處理..不會再呼叫Invalidate()或是Paint(),可以增加重繪時的效率... 小弟之前是在 TCustomcontrol上再放上一個Image當作Slider,改寫image的MouseDown, mouseup,及mousemove當作onchage的event,這樣只要移動image的TOP就有TrackBar效果.但是CPU的使用率郤高得很60~70%...(雖然在重繪時不會閃動).. 後來改攔WM_MOUSEMOUSE,... 直接算MytrackBar中Slider的位置 . 再直接繪圖..,就改善了很多( CPU 11~15% )..而且很順..在此提供給大家參考..也請大家多多指教 ^_^ /"
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |