怎么样在全局函数中调用UpdateData(FALSE)?

新建一个基于对话框的应用程序,然后在Dialg类中定义一个全居函数,在全居函数中定
一个自加的方法,每秒+1,在Dlg类中定义的编辑框与全局函数相关联,在全局函数中调用
CMy14MFC_6Dlg::UpdateData(FALSE);然后在对话框中的编辑控件中显示出来。可当在全局函数中
调用CMy14MFC_6Dlg::UpdateData(FALSE)显示错误。正确的方
法应该怎样调用呢?或者有其它什么方法?由于这个程序要用到Sleep(),所以采用的是多程序.
我是新手学VC,里面打错很多,没仔细检查,不好意思,是我说错了,是在类外定义的,多线程.不过问题我已经解觉了,用SendMessage给主窗口发送消息,然后在消息中用定义.

饮歌长啸
浏览 985回答 3
3回答

蛊毒传说

暂且不管你怎么定义的,先说这个UpdateData()。这个函数是CWnd类的一个成员函数,不是一个静态函数,所以不能像你那样,用CMy14MFC_6Dlg::UpdateData(FALSE);这种方式调用。只有在类的内部调用(即类成员函数调用),或通过类的实例对象调用。最后一句“由于这个程序要用到Sleep(),所以采用的是多程序.”也很难理解,我还是第一次听说“多程序”这个词。暂且我就把它当成是多线程吧,你说你要用到 Sleep() 这个函数,我想你是想实现那个一秒自加一次的功能吧,你用一个循环,加一次,然后 Sleep 一秒,对吧。其实这个功能可以,而且应该用 Timer实现。

月关宝盒

CXXXDLG居然能::UPdateData这样调用,厉害,难道一个类只能有一个实力打开一个拥有同样数据的对话框,VC不可能将这函数写成静态的UPDATEDATA你要想再外弄,得发MESSAGE自定义消息,让类里自己调用用ON_MESSAGE红设调用函数,想来你开发语言的不用那么复杂只要:"多程序运行"你的超级智能程序!

汪汪一只猫

用一个线程就行了在创建线程时,把对话框的指针做为参数在线程实现里面,把参数转为对话框指针,有了指针就可以调用了///////////////声明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);}//不好意思,本人不是高手,以上是凭脑写的,不知道有没有错误,请原谅
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Unity 3D