不使用定時器實現動態繪製動畫

2021-04-30 07:13:29 字數 1097 閱讀 5855

在實現乙個簡單動畫時,往往都會使用定時器,現在我們在**中不使用定時器來實現乙個動畫,首先我們要找乙個計時器,這是關鍵,動畫是有禎頻的,計時是必須的。查了

msdn

,gettickcount()

這個函式能夠滿足我們的需要。例子的特效是實現逐行掃瞄的效果,因此**實現如下

//在動畫體類中寫入兩個函式

//計時操作的函式,實現頻率觸發

bool

cactthumb::actthing( uint* uistop )

//64

表示逐行掃瞄到最後一行,結束了,此時傳乙個標誌,結束迴圈體的迴圈

if( m_uicount >= 64 )

m_uitick = tick;

return 1; }

return 0; }

//畫dc的函式,具體的繪製

void

cactthumb::drawact( hdc

hdc )

然後找個地方寫上下面這段呼叫上面的函式

bool

bctrol = true;

uint

uicor = 1;

while( bctrol )

deletedc( hdc ); }

這段**很**,看上去是乙個死迴圈,但在迴圈體中有乙個控制退出迴圈時機。

另外這個

hdc也很**,如果說會有問題,可能就在這個

dc上。

這種方式與定時器相比有乙個好處,就是可以在普通類裡操作,不受視窗訊息的限制,但它有個問題,就是在動畫時間內不能執行其他的動作,必須等這個動畫執行完了才能進入下個動作

(也許加到執行緒裡可以解決這個問題

),因此它比較適合用來做螢幕切換操作和對動畫的封裝

實際上只要

api提供了計時函式

,不管什麼平台

,都能採用上面的方法模擬定時器

gettickcount()

是取從裝置開機時開始算到執行這個函式止的毫秒數。

msdn

上說的是

boot

,是開機還是

wince

執行起來就不清楚了,我取的是時間差,不影響的。

Qlabel定時器和動畫 實現數字變化

include qautonumlabel.h includeqautonumlabel qautonumlabel qwidget parent qlabel parent void qautonumlabel settime int time void qautonumlabel setcoun...

SpringMVC使用定時器實現定時任務

為什麼要使用定時器?解決專案中需要在特定的時間點中進行某些任務 廢話不多說,下面給出最簡單的實現方法 先導入依賴 org.quartz schedulergroupid quartzartifactid 2.3.0version dependency 依賴匯入後,先去配置一下springmvc的配置...

使用定時器實現按鍵防抖動

button.c include include include include include include include include include include include include static struct class sixthdrv class static str...