<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                有好些時間沒寫博客了,今天要來耍一下計時器,就是我們常說的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消息 */ case 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; ~~~ 結果就如下面兩圖所示。 ![](https://box.kancloud.cn/2016-06-14_575fd313f1d61.jpg) ![](https://box.kancloud.cn/2016-06-14_575fd3140f21e.jpg)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看