为了账号安全,请及时绑定邮箱和手机立即绑定

怎么样在全局函数中调用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 关注
  • 979 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信