MFC中ListControl控件的使用及實時顯示系統(tǒng)時間的方法_第1頁
MFC中ListControl控件的使用及實時顯示系統(tǒng)時間的方法_第2頁
MFC中ListControl控件的使用及實時顯示系統(tǒng)時間的方法_第3頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、MFC 中 List Control控件的使用及實時顯示系統(tǒng)時間的方法 .(一) List Control控件的使用新近開發(fā)了一個攝像機標定的MFC 程序,標定完成后期望將求得的攝像機參數(shù)直觀地顯示到應用程序的界面上來。起初的方案是為每一個參數(shù)都建立一個Edit 控件,并對每一個控件設定一個控制變量,將該變量與相應參數(shù)對應起來。這樣做是可行的,但當參數(shù)眾多時比較繁瑣。鑒于此,決定在程序中使用List Control控件,將參數(shù)以List 的形式呈現(xiàn)在界面上。以下是我在基于對話框的MFC 程序中添加ListControl 控件的步驟。1.新加ListControl控件,屬性中的style屬性頁下

2、的View 選擇 Report 。并設置其對應的控制變量如:m_ListCtrl 。2.初始化,即設置列。m_ListCtrl.InsertColumn(0," 參數(shù)名 "); / 插入列 m_ListCtrl.InsertColumn(1," 參數(shù)值 "); m_ListCtrl.InsertColumn(2," 備注 "); CRect rect3;m_ListCtrl.GetClientRect(rect3); /獲得當前客戶區(qū)信息m_ListCtrl.SetColumnWidth(0,rect3.Width()/4); /設置

3、列的寬度。m_ListCtrl.SetColumnWidth(1,rect3.Width()*2/4);m_ListCtrl.SetColumnWidth(2,rect3.Width()/4);這部分初始化操作, 最好放在對話框類的OnInitDialog()函數(shù)里,自動初始化。3.插入數(shù)據(jù)m_ListCtrl.InsertItem(0,"參數(shù) 1"); / 插入第一個數(shù)據(jù), 即第 0 條數(shù)據(jù)。先插入,然后在修改其他的信息。m_ListCtrl.SetItemText(0,1,"參數(shù) 1 值"); / 修改第 0 條數(shù)據(jù)的其他信息。m_ListCtrl.

4、SetItemText(0,2,"無");SetItemText() 函數(shù)負責向列表里添加字符串。當需要添加的是非字符串的數(shù)據(jù)類型時,需要先轉(zhuǎn)換為字符串類型再用 SetItemText()完成添加。假設所需要添加的是double類型的浮點數(shù)。double dbl=1.2345678;char str16=0;sprintf(str, "%lf", dbl);m_ListCtrl.InsertItem(0,"參數(shù) 1");m_ListCtrl.SetItemText(0,1,str); /等價于m_ListCtrl.SetItemTex

5、t(0,1,“1.2345678”);需要注意的是用sprintf 族函數(shù)時, char 數(shù)組一定要足夠大,否則程序運行時會出現(xiàn)錯誤提示“ Stackaround the variable 'str' was corrupted ”,解決方法是把數(shù)組改大一些。4.刪除所有數(shù)據(jù)。 有些程序中需要刷新顯示數(shù)據(jù),如果直接利用上述方法,則會將當前顯示數(shù)據(jù)追加在前一次數(shù)據(jù)行的后面,造成隨著刷新次數(shù)的增加數(shù)據(jù)行線性增加的問題。解決方法是每次在插入數(shù)據(jù)之前刪除已有數(shù)據(jù),使用下面語句:m_ListCtrl.Dele

6、teAllItems();5.如何設置 ListView 控件的完全行 (Full Row) 選項。這個控件有個地方常常很惱人,那就是在報告視圖中選中一行時,它只加亮最左邊的一個欄目。解決方法:向ListView 控件發(fā)送一個VM_SETEXTENDEDLISTVIEWSTYLE消息。:SendMessage(m_ListCtrl.m_hWnd,LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);這條語句可以加在OnInitDialog() 函數(shù),也可以加在負責插入數(shù)據(jù)的代碼部分。(二) MFC 中實

7、時顯示系統(tǒng)時間下面給出在基于對話框的MFC 應用程序的Edit 控件中實時顯示系統(tǒng)時間的方法。首先來了解一下幾個主要的與定時器有關的函數(shù)。SetTimer() 函數(shù)表示定義一個定時器。根據(jù)定義指定的窗口,在指定的窗口 ( CWnd )中實現(xiàn) OnTimer事件,這樣,就可以響應事件了。SetTimer有兩個函數(shù)。一個是全局的函數(shù):SetTimer()UINT SetTimer( HWND hWnd, / handle of window for timer messagesUINT nIDEvent, / timeridentifierUINT uElapse,/time-out valueT

8、IMERPROClpTimerFunc / 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, UI

9、NT, UINT,DWORD) );nIDEvent: 是指設置這個定時器的iD ,即身份標志,這樣在 OnTimer() 事件中,才能根據(jù)不同的定時器,來做不同的事件響應。這個ID 是一個無符號的整型。nElapse :是指時間延遲。單位是毫秒。這意味著,每隔 nElapse 毫秒系統(tǒng)調(diào)用一次 Ontimer() 。void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD): Specifies the address of the application-supplied TimerProc callback function th

10、at processes the WM_TIMER messages. If this parameter is NULL, the WM_TIMER messages are placed in the application’s message queue and handled by theCWnd object 。意思指:指定應用程序提供的 TimerProc 回調(diào)函數(shù)的地址, 來處里這個 WM_TIMER 事件。如果是 NULL ,則由定義這個 Timer 事件的 CWnd 對象來處理該 Timer 事件。它將 WM_TIMER 消息傳遞給這個對象,通過實現(xiàn)這個對

11、象的 OnTimer() 事件來處理這個 Timer 事件。所以,一般情況下,我們將這個值設為 NULL ,由設置該定時器的對象中的OnTimer() 函數(shù)來處理這個事件。對于SetTimer() 可以在初始化當中添加!移走 ,使其不再作用。其用法如同這兩個函數(shù)表示的意思是將OnTimer() 函數(shù)是響應用SetTimer() 函數(shù)設定的時鐘發(fā)送的時鐘消息的,你沒設定時鐘,就不會有時鐘消息,OnTimer() 里的語句當然也不會被調(diào)用。為類添加WM_TIMER消息響應,會看到類中出現(xiàn)OnTimer(UINTnIDEvent) 函數(shù)。KillTimer() 同 SetTimer() 一樣,它也有

12、兩個,一個是全局的 :KillTimer(), 另一個是CWnd 的一個函數(shù)。聲明如下:/全局函數(shù)BOOL KillTimer( HWND hWnd, / handle of window that installed timerUINT uIDEvent / timeridentifier);/CWnd 函數(shù)BOOL KillTimer( int nIDEvent );ID 為 nIDEVENT 的定時器 SetTimer() 一樣。一般將KillTimer() 語句放在需要移去定時器的地方或程序退出是的窗口銷毀過程中。在基于對話框的 MFC 應用程序中,添加一個 Edit 控件, ID 標

13、號為 IDC_EDIT_TIME 。在 OnInitDialog() 函數(shù)中添加下面語句:SetTimer(1,1000,NULL);/1000毫秒發(fā)生一次定時器事件為類添加WM_TIMER消息響應函數(shù)OnTimer(UINT_PTR nIDEvent):void CTestDlg:OnTimer(UINT_PTR nIDEvent)/ TODO: Add your message handler code here and/or call defaultCDialog:OnTimer(nIDEvent); CString str;CTime theTime = CTime:GetCurrentTime();str.Format("%02d:%02d:%02d",theTime.GetHour(),t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論