MFC遍歷 清空所有Edit控制項內容

2021-07-13 16:16:53 字數 1289 閱讀 2756

先貼**

cwnd *pwnd = getwindow(gw_child);

tchar szbuf[256];

while(pwnd != null)

getgetwindow()函式的原型:

cwnd* getwindow(

uint ncmd

) const;

getwindow()函式返回的是與呼叫函式的視窗符合指定關係(引數ncmd)的視窗指標,ncmd可選取值見msdn。

我是在主視窗的事件處理函式內呼叫(this指標),ncmd為gw_child,因此返回的是主視窗的第乙個子視窗,即主對話方塊內第乙個控制項的指標。再配合後面的pwnd=pwnd->getnextwindow();

即可遍歷主視窗內所有控制項。

遍歷的順序在對話方塊的資源編輯器中按ctrl+d,編輯各控制項的tab值,這樣上面程式就會按照tab順序遍歷各個控制項。

另外

getnextwindow()和getwindow(gw_hwndnext)功能是一樣的,不受tab stop屬性影響

getnextdlgtabitem()是查詢具有tab stop屬性的控制項,按照順序依次往下查詢

其順序可以在布局(layout)中:tab 順序(tab order)中檢視到,也可以修改

詳情可參考孫鑫vc++第七課之對話方塊(一)

getclassname函式原型:

int getclassname(hwnd hwnd,lptstr ipclassname, int nmaxcount);

需要注意的是:

第乙個引數接收的是視窗的控制代碼hwnd,而不是視窗類指標cwnd*,兩者的區別聯絡以及相互獲取參考hwnd和cwnd的概念以及轉換

按照上述方法,不僅可以遍歷所有的edit控制項,根據ipclassname接收的視窗類名,可以遍歷、篩選各類控制項並進行相應的操作,詳見vc控制項—-如何根據控制代碼判斷其型別

忽略大小寫比較字串函式。

更多可參考string的成員用法

另外還要注意的是,這段**是通過控制項視窗類指標來操作的,如果控制項關聯了成員變數,在後面千萬不能再用updatedata(false),否則

pwnd->setwindowtext(_t(""));
執行的操作就白幹了,因為控制項的內容又恢復成成員變數的內容了。

實時重新整理MFC的EDIT控制項

今天有個同事談到了實時顯示mfc的edit控制項,我想了下,只能新增執行緒才能完成這個目標。但執行緒中不能使用updatedata函式。想到兩個解決方案,1.傳送訊息,把執行緒中的資料傳送到主線程進行實時顯示 我沒試,但肯定可以實現 2.使用getdlgitem通過id來顯示資料。unsigned ...

實時顯示MFC的EDIT控制項

今天有個同事談到了實時顯示mfc的edit控制項,我想了下,只能新增執行緒才能完成這個目標。但執行緒中不能使用updatedata函式。想到兩個解決方案,1.傳送訊息,把執行緒中的資料傳送到主線程進行實時顯示 我沒試,但肯定可以實現 2.使用getdlgitem通過id來顯示資料。unsigned ...

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

mfc中實時顯示系統時間 下面給出在基於對話方塊的mfc應用程式的edit控制項中實時顯示系統時間的方法。首先來了解一下幾個主要的與定時器有關的函式。settimer 函式表示定義乙個定時器。根據定義指定的視窗,在指定的視窗 cwnd 中實現ontimer事件,這樣,就可以響應事件了。settime...