MFC中Edit控制項顯示系統時間

2021-07-08 17:57:05 字數 2046 閱讀 1356

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...