3 回答

TA貢獻1895條經驗 獲得超3個贊
暫且不管你怎么定義的,先說這個UpdateData()。這個函數是
CWnd類的一個成員函數,不是一個靜態函數,所以不能像你那樣,用CMy14MFC_6Dlg::UpdateData(FALSE);這種方式調用。只有在類的內部調用(即類成員函數調用),或通過類的實例對象調用。
最后一句“由于這個程序要用到Sleep(),所以采用的是多程序.”也很難理解,我還是第一次聽說“多程序”這個詞。
暫且我就把它當成是多線程吧,你說你要用到 Sleep() 這個函數,我想你是想實現那個一秒自加一次的功能吧,你用一個循環,加一次,然后 Sleep 一秒,對吧。
其實這個功能可以,而且應該用 Timer實現。

TA貢獻1772條經驗 獲得超5個贊
CXXXDLG居然能::UPdateData這樣調用,厲害,難道一個類只能有一個實力打開一個擁有同樣數據的對話框,VC不可能將這函數寫成靜態的UPDATEDATA
你要想再外弄,得發MESSAGE自定義消息,讓類里自己調用用ON_MESSAGE紅設調用函數,想來你開發語言的不用那么復雜只要:
"多程序運行"
你的超級智能程序!

TA貢獻1898條經驗 獲得超8個贊
用一個線程就行了
在創建線程時,把對話框的指針做為參數
在線程實現里面,把參數轉為對話框指針,有了指針就可以調用了
///////////////
聲明
public:
static DWORD WINAPI UpdateDataThread(LPVOID);///注意聲明為static
定義
DWORD WINAPI CMy14MFC_6Dlg::UpdateDataThread(LPVOID lp){
CMy14MFC_6Dlg* dlg = (CMy14MFC_6Dlg*)lp;
while(true){
dlg->UpdateData(FALSE);
Sleep(1000);
}
return 0;
}
CMy14MFC_6Dlg::XXXXX(){///在某函數里面創建一個線程,關鍵是把this做為參數傳進去
CreateThread(NULL,0,LPTHREAD_START_ROUINE(&CMy14MFC_6Dlg::UpdateDataThread),this,0,0);
}
//不好意思,本人不是高手,以上是憑腦寫的,不知道有沒有錯誤,請原諒
- 3 回答
- 0 關注
- 1070 瀏覽
添加回答
舉報