先貼**
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屬性影響getclassname函式原型:getnextdlgtabitem()是查詢具有tab stop屬性的控制項,按照順序依次往下查詢
其順序可以在布局(layout)中:tab 順序(tab order)中檢視到,也可以修改
詳情可參考孫鑫vc++第七課之對話方塊(一)
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...