UpdateData的问题

wjl_2001 2004-08-02 12:07:15
程序中的某一地方我用了UpdateData就出现非法,而在其它地方不会,想请问原因?是不是要在出现非法的语句前加上一句什么调用?
...全文
279 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
newsb 2004-08-16
  • 打赏
  • 举报
回复
还是用PostMessage()好一些
32204577 2004-08-13
  • 打赏
  • 举报
回复
先自定义消息,然后用SendMessage(..,..,..,)向对话框类发送消息,进行数据的更新。是上策。
------------------------------------
32204577
------------------------------------
体验速度,体验CSDN新版论坛助手:http://community.csdn.net/Expert/TopicView.asp?id=3108679
oyljerry 2004-08-13
  • 打赏
  • 举报
回复
嗯,两种方法:传指针和发消息,个人偏向发消息
holyeagle 2004-08-13
  • 打赏
  • 举报
回复
可以把主程序的指针当做参数传到线程,线程中直接调用主程序的相应函数,不用发消息的
jinrongfei 2004-08-13
  • 打赏
  • 举报
回复
在线程内,只能用在此线程内定义的对象。
wjl_2001 2004-08-13
  • 打赏
  • 举报
回复
没办法,只能用自定义消息!!!
hellopine 2004-08-13
  • 打赏
  • 举报
回复
同意楼上,我上边说错了
在附线程中不能调用主线程中窗口对象的UPDATEDATA()
建议发送消息到CMyDlg
在CMyDlg中执行你的GetMsg(RecvBuf,getlength);
newsb 2004-08-13
  • 打赏
  • 举报
回复
在线程里面UpdateData要报错的
hellopine 2004-08-13
  • 打赏
  • 举报
回复
请看:
UINT ListenPing(LPVOID lParam)
{
CABC*pAbc=CABC*(lParam);
if(pAbc->m_hWnd)
this->GetMsg(RecvBuf,getlength);
}



CABC::OnInitDialog()
{
.....

AfxBeginThread(ListenPing,this);

.....
}
wjl_2001 2004-08-05
  • 打赏
  • 举报
回复
我讲得再详细点
一对话框主程序,类名为CABC;
在CABC的OnInitDialog里调用一全局线程ListenPing:
...
CreateThread(NULL,0,ListenPing,NULL,0,&dw);
.....


在ListenPing里
....
((CABC*)(AfxGetApp()->m_pMainWnd))->GetMsg(RecvBuf,getlength);
....

这样,我在CABC的GetMsg(RecvBuf,getlength)里
不能用UpdateData()
且不能调用我写的简单的对话框类

CDisplay d1;
d1.DoMoDal();
都会出现非操作,

请教大家,如何解决?

wjl_2001 2004-08-03
  • 打赏
  • 举报
回复
up
wjl_2001 2004-08-02
  • 打赏
  • 举报
回复
在OnInitDialog里一早就用了
m_pMainWnd=AfxGetMainWnd();

用句柄->SetWindowText("***")当然不会出现非法操作,但有时要更新一大批数据,故不宜如此做法!
successq 2004-08-02
  • 打赏
  • 举报
回复
你是要实现数据的更新功能吧。
如果是的话,你可以试试
句柄->SetWindowText("***");
holyeagle 2004-08-02
  • 打赏
  • 举报
回复
onInitDialog还没有完成,m_pMainWnd好像还是NULL
wjl_2001 2004-08-02
  • 打赏
  • 举报
回复
代码太多太乱,简要说一下
对话框程序
在OnInitDialog里
建一线程,线程里简单地调用了主对话框里的一个函数

...
((CClientDlg *)(AfxGetApp()->m_pMainWnd))->GetMsg();
....
这样,在GetMsg里就不能UpdateData了,会出现非法操作
lixiaosan 2004-08-02
  • 打赏
  • 举报
回复
这个说不准。。要看代码才知道
successq 2004-08-02
  • 打赏
  • 举报
回复
这个是对数据的更新操作。
bohut 2004-08-02
  • 打赏
  • 举报
回复
贴代码出来看看
一个可以实现正负,小数等的计算器 void CTry1Dlg::OnButton6() { CString a; double int3; switch(b) { case 1: UpdateData(); int2=atof(m_strEdit); int3=int1+int2; //str.Format(_T("%lf"),num); a.Format(_T("%lf"),int3); //MessageBox(a); break; case 2: UpdateData(); int2=atof(m_strEdit); int3=int1-int2; a.Format(_T("%lf"),int3); break; case 3:UpdateData(); int2=atof(m_strEdit); int3=int1*int2; a.Format(_T("%lf"),int3); break; case 4:UpdateData(); a="该运算不能执行"; MessageBox(a); break; case 5:UpdateData(); int2=atof(m_strEdit); int3=int1/int2; a.Format(_T("%d"),int3); break; } m_strEdit=a; UpdateData(FALSE); } void CTry1Dlg::OnButton7() { UpdateData(); m_strEdit=m_strEdit+"1"; UpdateData(FALSE); } void CTry1Dlg::OnButton8() { UpdateData(); m_strEdit=m_strEdit+"2"; UpdateData(FALSE); } void CTry1Dlg::OnButton9() { UpdateData(); m_strEdit=m_strEdit+"3"; UpdateData(FALSE); } void CTry1Dlg::OnButton10() { UpdateData(); m_strEdit=m_strEdit+"4"; UpdateData(FALSE); } void CTry1Dlg::OnButton11() { UpdateData(); m_strEdit=m_strEdit+"5"; UpdateData(FALSE); } void CTry1Dlg::OnButton12() { UpdateData(); m_strEdit=m_strEdit+"6"; UpdateData(FALSE); } void CTry1Dlg::OnButton13() { UpdateData(); m_strEdit=m_strEdit+"7"; UpdateData(FALSE); } void CTry1Dlg::OnButton14() { UpdateData(); m_strEdit=m_strEdit+"8"; UpdateData(FALSE); } void CTry1Dlg::OnButton15() { UpdateData(); m_strEdit=m_strEdit+"9"; UpdateData(FALSE); } void CTry1Dlg::OnButton16() { UpdateData(); m_strEdit=m_strEdit+"0"; UpdateData(FALSE); } void CTry1Dlg::OnButton2() //- { UpdateData(); int1=atof(m_strEdit); m_strEdit=""; UpdateData(FALSE); b=2; } void CTry1Dlg::OnButton3() //* { UpdateData(); int1=atof(m_strEdit); m_strEdit=""; UpdateData(FALSE); b=3; } void CTry1Dlg::OnButton4() // % { UpdateData(); int1=atof(m_strEdit); m_strEdit=""; UpdateData(FALSE); b=4; } void CTry1Dlg::OnButton5() // / { UpdateData(); int1=atof(m_strEdit); m_strEdit=""; UpdateData(FALSE); b=5; } void CTry1Dlg::OnButton17() { m_strEdit=""; UpdateData(FALSE); } void CTry1Dlg::OnButton18() { UpdateData(); m_strEdit=m_strEdit+"."; UpdateData(FALSE); }

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧