CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

动态刷新edit 控件内容?在线等待,随时加分

楼主zhaoxyu(小雨)2002-10-12 10:56:33 在 VC/MFC / 基础类 提问

不停的刷新edit的内容,如果这样:  
  void   Cmydlg::Onbutton1()  
  {  
  bool   stop=false;  
  do    
  {  
  SetDlgItemText(IDC_EDIT1,stingx);  
  }while(stop==false);  
   
  }  
  这样会使主程序处于死锁状态,如果启动线程执行:  
  void   Cmydlg::Onbutton1()  
  {  
  CWinThread   *pThread=AfxBeginThread(Gets,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);  
  }  
  UINT   Gets(LPVOID   pParam)  
  {  
   
  bool   stop=false;  
  do    
  {  
  SetDlgItemText(IDC_EDIT1,stingx);//此处不行,无法执行  
  //或者{Cmydlg   dlg;   dlg.SetDlgItemText(IDC_EDIT1,stingx);//也不行  
  }while(stop==false);  
   
   
  return   0;  
  }  
   
   
  应该如何操作?保证edit中的数据不断刷新,但不影响程序的执行(其他的按钮可以操作)?谢谢众位!  
  问题点数:100、回复次数:12Top

1 楼goodlcp(goodlcp)回复于 2002-10-12 11:01:24 得分 20

void   Cmydlg::Onbutton1()  
  {  
  CWinThread   *pThread=AfxBeginThread(Gets,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);  
  }  
   
   
   
   
  UINT   Gets(LPVOID   pParam)  
  {  
   
  Cmydlg   *ttt=(Cmydlg*)pParam;  
   
  bool   stop=false;  
  do    
  {  
  ttt->SetDlgItemText(IDC_EDIT1,stingx);//此处不行,无法执行  
  //或者{Cmydlg   dlg;   dlg.SetDlgItemText(IDC_EDIT1,stingx);//也不行  
  }while(stop==false);  
   
   
  return   0;  
  }  
  Top

2 楼kwiner(ak.net)回复于 2002-10-12 11:04:07 得分 0

不是   UpdateData(FALSE)吗Top

3 楼flood75(9527)回复于 2002-10-12 11:06:03 得分 10

线程中要获得窗口的句柄  
  在线程开始处添加:  
  CCmydlg     *MainDlg;  
  MainDlg=(Cmydlg   *)lpParam;  
  后面使用:  
  MainDlg->SetDlgItemText(IDC_EDIT1,stingx);Top

4 楼cwkxm(cwkxm)回复于 2002-10-12 11:08:49 得分 10

很简单:  
  设置一个定时器:  
  SetTimer(1,100,NULL)   //每100毫秒刷新一次  
  然后在WM_TIMER消息处理函数中执行:SetDlgItemText(IDC_EDIT1,stingx);  
   
  或者干脆将IDC_EDIT1通过成员变量映射为      
  CString   stingx   和   CEdit   m_edit;  
  然后在WM_TIMER消息处理函数中执行:UpdateData(false);  
   
  Top

5 楼mcsdu_net(一生孤独)回复于 2002-10-12 11:10:34 得分 0

可以用OnTimer函数,设定时间间隔,在OnTimer中刷新Top

6 楼zhanvi(流浪代码)回复于 2002-10-12 11:17:21 得分 0

线程调用传递编辑框的指针,  
  然后在线程函数中使用传递过来的指针  
  CEDIT*   edit=GetDlgItem(IDC_EDIT1)  
  AfxBeginThread(GetSafeHwnd(),edit);  
  GetSafeHwnd(LPVOID   lpparam)  
  {  
          CEDIT*e=(CEDIT*)lpparam;  
  ....  
  }  
   
  Top

7 楼goodlcp(goodlcp)回复于 2002-10-12 11:21:26 得分 0

答  
  线程调用传递编辑框的指针,  
  然后在线程函数中使用传递过来的指针  
  CEDIT*   edit=GetDlgItem(IDC_EDIT1)  
  AfxBeginThread(GetSafeHwnd(),edit);  
  GetSafeHwnd(LPVOID   lpparam)  
  {  
          CEDIT*e=(CEDIT*)lpparam;  
  ....  
  }  
   
   
  这段代码是错误的。GetSafeHwnd()传递的指针一定能转换成CEdit指针吗。  
  如果在对话框中调用此方法,返回的是对话框指针,而且是HWND型,不是CWnd型。Top

8 楼fz_zhou(vcfan)回复于 2002-10-12 11:29:05 得分 0

UpdateWindow;Top

9 楼sjsj(虚怀若谷)回复于 2002-10-12 11:38:53 得分 50

我看楼主的困难是在这一句:  
  SetDlgItemText(IDC_EDIT1,stingx);//此处不行,无法执行  
   
  其实这是可以解决的,关键是要找到SetDlgItemText所属的对话框的对象指针。  
  如果你是简单的对话框程序,那么这样就行了:  
  ((CYourDlg   *)AfxGetApp()->m_pMainWnd)->SetDlgItemText(IDC_EDIT1,stingx);  
  Top

10 楼sjsj(虚怀若谷)回复于 2002-10-12 11:40:31 得分 0

如果是SDI或者MDI的程序,也是类似搞定。Top

11 楼qxwang(wang)回复于 2002-10-12 12:28:08 得分 0

使用定时器,在定时器响应函数中对EDIT内容刷新Top

12 楼YoungBoz(西山月)回复于 2002-10-12 12:51:06 得分 10

在你的程序中加一行PeekMessage函数,检查有无消息。这样就不会使程序死锁了,这么用法你就查找一下MFC的源代吗吧。(把PeekMessage放到Find   in   file中去);Top

相关问题

  • TreeView控件刷新?
  • 为什么ASP.net中动态控件在刷新后不能保持?
  • ListBox控件可不可以用程序控制动态刷新?急!
  • Table控件中动态生成datagrid,但刷新一次就dg就消失?
  • label 控件刷新问题
  • 如何刷新CTreeCtrl控件
  • 树控件刷新问题
  • 树控件刷新问题
  • winform中刷新label控件
  • 树控件不刷新

关键词

  • 函数
  • 指针
  • idc
  • 线程
  • 执行
  • 内容
  • 消息
  • stingx
  • setdlgitemtext
  • cmydlg

得分解答快速导航

  • 帖主:zhaoxyu
  • goodlcp
  • flood75
  • cwkxm
  • sjsj
  • YoungBoz

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo