Win32開發入門(24):計時器

來源:互聯網
上載者:User

有好些時間沒寫部落格了,今天要來耍一下計時器,就是我們常說的Timer,它雖然不是什麼複雜的東 西,也稱不 上牛X,不過,用處還是不少的,對於那些需要每隔一定時間執行一次的任務,那是相當有 用。

先來認識一下一對函數,注意,是一對,不是一個。

SetTimer——設定並啟用計時 器;

KillTimer——取消計時器。

現在你明白為什麼要一對的原因了,就好比進程操作 ,有啟動或建立進程的函數,就肯定要有關閉進程的函數;有GetDC就肯定要伴隨著ReleaseDC函數。陰 與陽是此消彼長的。

先說SetTimer,函數的定義我不說了,自己看標頭檔和MSDN就行了,主要 說說以下兩個參數:

nIDEvent指的是計時器的ID,一個數值,你可以隨例取,只要不是負數不 是小數就行,例如10,200,56,115,222等;最後一個參數lpTimerFunc是指向一個回呼函數的指標, 這個與WindowProc類似的,但是這個參數是可以為NULL的。

當該參數為NULL時,在WindowProc 中你就要捕捉WM_TIMER訊息,不過,這個是訊息是低優先順序的,系統會在處理完其他訊息後,閑著沒事 幹才會來處理WM_TIMER訊息。如果lpTimerFunc參數不為NULL,就不用捕捉WM_TIMER了,直接在回調函 數中處理即可。

如果所使用的Timer的ID已經存在,那麼就會以新的Timer來取代原有的Timer。

KillTimer好說,就是銷毀計時器,其中,Timer的ID要與前面SetTimer時用的ID保持一致,這 個就不用特別說明了,你拿著你的借書證去圖書館借書,到還書的時候,你當然不會拿別人的借書證去 還書吧?

理論的東西都是說多無益,還是用執行個體來說話吧。

先簡單說說這個例子,主 要運用計時器,每隔一秒(1000毫秒)執行一次,但每次的情況不同,所以用一個BOOL類型的變數來標 識,如果為TRUE就在WM_PAINT事件中把視窗的用戶端區域填充為紅色,如果為FALSE就不填充。如此,就 可以使得視窗呈現出一閃一閃的效果。

我只貼出核心代碼,完整的例子我隨後上傳到【資源】 中。

// Timer的回呼函數  VOID CALLBACK TimerProc(    _In_  HWND hwnd,    _In_  UINT uMsg,    _In_  UINT_PTR idEvent,    _In_  DWORD dwTime  )  {      isBorderDrawed = !isBorderDrawed;      RECT rect;      GetClientRect(hwnd,&rect);      InvalidateRect(hwnd, &rect, TRUE);  }
      /* 處理WM_PAINT訊息 */ase WM_PAINT:  hdc = BeginPaint(hWnd, &ps);  // TODO: 在此添加任意繪圖代碼...     // 擷取視窗邊框矩形  RECT rect;  GetClientRect(hWnd, &rect);  if (isBorderDrawed)  {      HBRUSH hb = CreateSolidBrush(RGB(255,0,0));      FillRect(hdc,&rect, hb);      SelectObject(hdc,hb);  }  EndPaint(hWnd, &ps);  break;

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。