mfc中實時顯示系統時間
下面給出在基於對話方塊的mfc應用程式的edit控制項中實時顯示系統時間的方法。首先來了解一下幾個主要的與定時器有關的函式。
settimer()函式表示定義乙個定時器。根據定義指定的視窗,在指定的視窗(cwnd)中實現ontimer事件,這樣,就可以響應事件了。
settimer有兩個函式。乙個是全域性的函式::settimer()
uint settimer( hwnd hwnd, // handle of window for timer messages
uint nidevent, // timer identifier
uint uelapse, // time-out value
timerproc lptimerfunc // address of timer procedure
);
其中hwnd 是指向cwnd的指標,即處理timer事件的視窗類。說道視窗類(cwnd)
我們有必要來看一下cwnd的繼承情況:cwnd有以下子類:cframewnd,cdialog,cview,ccontrolbar等類
這也意味這些類中都可以定義settimer事件。
settimer()的另外一種定義為:
uint settimer( uint nidevent, uint nelapse, void (callback export* lpfntimer)(hwnd, uint, uint, dword) );
nidevent:是指設定這個定時器的id,即身份標誌,這樣在ontimer()事件中,才能根據不同的定時器,來做不同的事件響應
這個id是乙個無符號的整型。
nelapse:是指時間延遲。單位是毫秒。這意味著,每隔nelapse毫秒系統呼叫一次ontimer()。
void (callback export* lpfntimer)
(hwnd, uint, uint, dword):
如果是null,則由定義這個timer事件的cwnd物件來處理該timer事件。它將wm_timer訊息傳遞給這個物件
通過實現這個物件的ontimer()事件來處理這個timer事件。所以,一般情況下,我們將這個值設為null
由設定該定時器的物件中的ontimer()函式來處理這個事件。對於settimer()可以在初始化當中新增!
ontimer()函式是響應用settimer()函式設定的時鐘傳送的時鐘訊息的,你沒設定時鐘,就不會有時鐘訊息
ontimer()裡的語句當然也不會被呼叫。為類新增wm_timer訊息響應,會看到類中出現ontimer(uint nidevent)函式。
killtimer()同settimer()一樣,它也有兩個,乙個是全域性的::killtimer(),另乙個是cwnd的乙個函式。宣告如下:
//全域性函式
bool killtimer( hwnd hwnd, // handle of window that installed timer
uint uidevent // timer identifier
); //cwnd函式
bool killtimer( int nidevent );
這兩個函式表示的意思是將id為nidevent的定時器移走,使其不再作用。其用法如同settimer()一樣
一般將killtimer()語句放在需要移去定時器的地方或程式退出是的視窗銷毀過程中。
在基於對話方塊的mfc應用程式中,新增乙個edit控制項,id標號為idc_edit_time。
在oninitdialog()函式中新增下面語句:
settimer(1,1000,null);//1000毫秒發生一次定時器事件
為類新增wm_timer訊息響應函式ontimer(uint_ptr nidevent):
void ctestdlg::ontimer(uint_ptr nidevent)
為類新增wm_destroy訊息響應函式ondestroy():
void ctestdlg::ondestroy()
實時顯示MFC的EDIT控制項
今天有個同事談到了實時顯示mfc的edit控制項,我想了下,只能新增執行緒才能完成這個目標。但執行緒中不能使用updatedata函式。想到兩個解決方案,1.傳送訊息,把執行緒中的資料傳送到主線程進行實時顯示 我沒試,但肯定可以實現 2.使用getdlgitem通過id來顯示資料。unsigned ...
實時重新整理MFC的EDIT控制項
今天有個同事談到了實時顯示mfc的edit控制項,我想了下,只能新增執行緒才能完成這個目標。但執行緒中不能使用updatedata函式。想到兩個解決方案,1.傳送訊息,把執行緒中的資料傳送到主線程進行實時顯示 我沒試,但肯定可以實現 2.使用getdlgitem通過id來顯示資料。unsigned ...
MFC遍歷 清空所有Edit控制項內容
先貼 cwnd pwnd getwindow gw child tchar szbuf 256 while pwnd null getgetwindow 函式的原型 cwnd getwindow uint ncmd const getwindow 函式返回的是與呼叫函式的視窗符合指定關係 引數ncm...