WIN32學習 定時器訊息

2021-07-31 23:47:41 字數 2802 閱讀 2574

1 定時器訊息

可以在程式中設定定時器,當到達時間間隔時,定時器會向視窗傳送乙個wm_timer訊息,定時器的精度為毫秒,但是精準度很低。

2 訊息的引數

wparam - 定時器id

lparam - 定時器處理函式的指標

3 定時器的使用步驟

a、建立定時器

uint settimer(

hwnd hwnd, //定時器視窗控制代碼

uint nidevent,//定時器id

uint uelapse, //時間間隔

timerproc lptimerfunc//定時器處理函式指標

);建立成功,返回非0.

說明:當lptimerfunc設定為null時,使用視窗處理函式作為定時器處理函式,否則就使用定時器處理函式處理定時器訊息

b、訊息處理 wm_timer

c、關閉定時器

bool killtimer(

hwnd hwnd, //定時器視窗控制代碼

uint uidevent //定時器id);

附加定時器訊息學習**:

/*

說明: 視窗的實現

對於wm_timer訊息的學習

在視窗繪製小球,並用定時器讓小球運動起來,看小球的執行軌跡

*/#include //圓的半徑

#define redius 20

hinstance g_hinstance;

handle g_houtputhandle;

int n_xpos = 100,n_ypos = 100;

//表示從左到右,從上到下的方向

int left_right = 1;

int up_down = 1;

void callback mytimer(hwnd hwnd, uint umsg, uint idevent, dword dwtime )

; wsprintf(sztext,__text("timer:%d\n"),idevent);

writeconsole(g_houtputhandle,sztext,lstrlen(sztext),null,null);

//得到視窗的矩形區域

rect rt = ;

getclientrect(hwnd,&rt);

if(n_xpos >= rt.right - 20)

left_right = 0;

else if (n_xpos <= rt.left)

if(left_right)

n_xpos++;

else

n_xpos--;

if(n_ypos >= rt.bottom - 20)

up_down = 0;

else if (n_ypos <= rt.top)

if(up_down)

n_ypos++;

else

n_ypos--;

invalidaterect(hwnd,null,false);

}void ontimer(wparam wparam)

; wsprintf(sztext,__text("wm_timer:%d\n"),wparam);

writeconsole(g_houtputhandle,sztext,lstrlen(sztext),null,null);

}void oncreate(hwnd hwnd)

void onpaint(hwnd hwnd)

; hdc hdc = beginpaint(hwnd,&ps);

ellipse(hdc,n_xpos,n_ypos,n_xpos + redius,n_ypos+redius);

endpaint(hwnd,&ps);

}lresult callback myproc(hwnd hwnd,uint umsg,wparam wparam,lparam lparam)

else

return 0;

} break;

} return defwindowproc(hwnd,umsg,wparam,lparam);

}atom register(lpcwstr classname)

; wc.cbcl***tra = 0;

wc.cbsize = sizeof(wndclas***);

wc.cbwndextra = 0;

wc.hbrbackground = (hbrush)color_window;

wc.hcursor = null;

wc.hicon = null;

wc.hiconsm = null;

wc.hinstance = g_hinstance;

wc.lpfnwndproc = myproc;

wc.lpszclassname = classname;

wc.lpszmenuname = null;

wc.style = cs_hredraw | cs_vredraw;

return registerclas***(&wc);

}hwnd create(lpcwstr classname,lpcwstr windowname)

void show(hwnd hwnd)

void message()

; while (getmessage(&ms,null,0,0)) }

int winapi winmain(hinstance hinstance,hinstance hprevinstance,lpstr lpcmdline,int nshowcmd)

win32學習08 鍵盤滑鼠定時器訊息

鍵盤和滑鼠的訊息引數 lresult callback windowproc hwnd hwnd,handle to window uint umsg,wm keydown wparam wparam,virtual key code lparam lparam key data wparam 按鍵...

STM32學習 定時器(通用定時器)

如圖所示,輸出理解時注意兩種訊號ocxref和ocx,ocx是直接連到埠的訊號,ocxref是輸出控制的輸出訊號。一般在參考手冊中大多數講ocxref。ocx與ocxref可由ccxp控制是否反向,由ccxe控制訊號輸出。比較輸出功能 輸出乙個波形 指示一段給定時間已到。它的原理是通過計數器的值cn...

win32 程式中定時器的使用

1.settimer 在控制台應用程式中同樣可以用 settimer 實現定時器的效果。示例 include includeusing namespace std void callback timeproc hwnd hwnd,uint message,uint idtimer,dword dwt...