Win32API學習筆記第四章

2021-08-02 20:38:32 字數 2307 閱讀 4153

這個訊息是由windows處理硬體中斷的產生的,windows儲存乙個每次硬體計時器滴答減少的次數,當這個計數減到0時就會產生乙個wm_timer訊息,這個訊息其實時不會造成非同步的(類似鍵盤和滑鼠,由硬體來處理非同步硬體中斷時間)所以,這個訊息同樣要進入訊息佇列等待訊息迴圈的讀取,所以這個訊息的產生並不是非常準確的,這要取決於計算機硬體和之前訊息的處理速度,如果之前的訊息沒有處理完,同樣wm_timer這個訊息也比需等待,所以這個時間實際上並不是特別的準確。

順帶一提,這個訊息和wm_paint是同樣的最低優先順序,因為這一點就可以防止非同步處理訊息,並且同樣的,這個訊息winows也不會同時在訊息佇列內插入多個,而是會將多個此訊息合併為乙個(類似wm_paint)

要使用這個計時器,按照常理我們有:

通常我們會在訊息wm_create和wm_destroy兩個訊息裡分別設定settimer和killtimer,當然,我們發現,settimer這個函式後面跟了乙個特殊的函式指標,實際上這個函式指標裡面的語句就是wm_timer訊息,只是此時這個訊息的執行方式由:計時器滴答計數為0->向訊息佇列內插入wm_timer->等待wndproc接收並處理此訊息變為:計時器滴答計數為0->呼叫函式指標所指向的函式

這個函式是乙個時間訊息過程(類似於視窗過程)timeproc的形式是:void callback timeproc(hwnd,message,計時器id,乙個從gettickcount函式返回值相容的值)(這個gettickcount的返回值是windows啟動後所進過的毫秒數)

這個結構包含了年月日時分秒毫秒,相當的準確

這兩個函式的引數都是(l)psystemtime,其中,前者時當地的時間,這個依賴於計算機的時區,後者則是和英國格林威治的時間大概相同,兩者的精確度完全取決於使用者的設定

來看乙個書上的例子:

/*-----------------------------------------

digclock.c -- digital clock

(c) charles petzold, 1998

-----------------------------------------*/

#include

#define id_timer 1

lresult callback wndproc(hwnd, uint, wparam, lparam);

int winapi winmain(hinstance hinstance, hinstance hprevinstance,

pstr szcmdline, int icmdshow)

cw_usedefault, cw_usedefault,

cw_usedefault, cw_usedefault,

null, null, hinstance, null);

showwindow(hwnd, icmdshow);

updatewindow(hwnd);

while (getmessage(&msg, null, 0, 0))

return msg.wparam;

}void displaydigit(hdc hdc, int inumber)

; // 9

static point ptsegment[7][6] = ;

int iseg;

for (iseg = 0; iseg < 7; iseg++)

if (fsevensegment[inumber][iseg])

polygon(hdc, ptsegment[iseg], 6);

}void displaytwodigits(hdc hdc, int inumber, bool fsuppress)

void displaycolon(hdc hdc)

; polygon(hdc, ptcolon[0], 4);

polygon(hdc, ptcolon[1], 4);

offsetwindoworgex(hdc, -12, 0, null);

}void displaytime(hdc hdc, bool f24hour, bool fsuppress)

lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)

return defwindowproc(hwnd, message, wparam, lparam);

}

這個程式是做了乙個簡易的電子時鐘,乙個值得注意的點是在獲取時間訊息那裡,它強制性的重新整理了客戶區,雖然會導致出現是不是的閃爍問題,但是這個是美妙重新整理一次顯示最好的解決方法了

第四章筆記

一.引入樣式 1.行內樣式表 2.內部樣式表 在head標籤裡面,title標籤下面 優點方便在同頁面中修改樣式 缺點不利於在多頁面間共享復用 及維護,對內容與樣式的分離也不夠徹底 3.外部樣式表 嵌入式匯入式 嵌入式和匯入式的區別 1.標籤屬於xhtml,import是屬於css2.1 2.使用鏈...

第四章筆記

氣泡排序 從大到小 基本思想 兩層迴圈來完成,每一輪比較之後,把最小數沉到陣列的末尾,之後進行下一輪的比較,比較的次數減少一次,因為最後的數字已經是最小 外層迴圈控制比較的輪數,陣列的長度減一次 內層迴圈進行比較。int testarr for int i 1 i testarr.length 1 ...

K R學習筆記 第四章

全面系統的講解函式了。首先映入我眼簾的是一種奇怪的函式宣告方式 main 它在main函式中宣告了自己編寫的atof char 函式。至於原因是什麼,我也不得而知了。按照書上的說明,c 是不允許在乙個函式裡定義其它函式的,函式本身是external的。下面的 include int main voi...