亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

怎么樣在全局函數中調用UpdateData(FALSE)?

怎么樣在全局函數中調用UpdateData(FALSE)?

飲歌長嘯 2019-02-05 10:06:06
新建一個基于對話框的應用程序,然后在Dialg類中定義一個全居函數,在全居函數中定一個自加的方法,每秒+1,在Dlg類中定義的編輯框與全局函數相關聯,在全局函數中調用CMy14MFC_6Dlg::UpdateData(FALSE);然后在對話框中的編輯控件中顯示出來??僧斣谌趾瘮抵姓{用CMy14MFC_6Dlg::UpdateData(FALSE)顯示錯誤。正確的方法應該怎樣調用呢?或者有其它什么方法?由于這個程序要用到Sleep(),所以采用的是多程序.我是新手學VC,里面打錯很多,沒仔細檢查,不好意思,是我說錯了,是在類外定義的,多線程.不過問題我已經解覺了,用SendMessage給主窗口發送消息,然后在消息中用定義.
查看完整描述

3 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

暫且不管你怎么定義的,先說這個UpdateData()。這個函數是
CWnd類的一個成員函數,不是一個靜態函數,所以不能像你那樣,用CMy14MFC_6Dlg::UpdateData(FALSE);這種方式調用。只有在類的內部調用(即類成員函數調用),或通過類的實例對象調用。

最后一句“由于這個程序要用到Sleep(),所以采用的是多程序.”也很難理解,我還是第一次聽說“多程序”這個詞。
暫且我就把它當成是多線程吧,你說你要用到 Sleep() 這個函數,我想你是想實現那個一秒自加一次的功能吧,你用一個循環,加一次,然后 Sleep 一秒,對吧。
其實這個功能可以,而且應該用 Timer實現。

查看完整回答
反對 回復 2019-03-24
?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

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

查看完整回答
反對 回復 2019-03-24
?
汪汪一只貓

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);
}

//不好意思,本人不是高手,以上是憑腦寫的,不知道有沒有錯誤,請原諒



查看完整回答
反對 回復 2019-03-24
  • 3 回答
  • 0 關注
  • 1070 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號