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

如何弹出含有进度条的对话框?

楼主lostiger(傅立叶变换)2004-08-01 16:24:19 在 VC/MFC / 界面 提问

当用户点击用户界面的某一按钮的时候,通知辅助线程进行事务处理,需要消耗一定的时间。   这个时候希望弹出一个对话框,告知用户正在处理。  
            这样怎么实现呢?  
         
            我自己从CDialog   派生了一个含有进度条的类   CProgDlg   theDlg;  
             
            但是无法显示出来  
   
            线程里面能不能生成对话框阿?   即:    
   
              CProgDlg   theDlg;  
              theDlg.modal(); 问题点数:20、回复次数:16Top

1 楼zhucde(【風間苍月】★<==>★【虚拟闲人】)回复于 2004-08-01 16:53:51 得分 4

线程里可以产生对话框.  
  但推荐用线程类来实现.  
  Top

2 楼mingbao(★情已逝★)回复于 2004-08-01 19:31:16 得分 0

CProgDlg   theDlg;  
              theDlg.modal();   //必然等到这个函数返回之后,它下面的代码才能接着执行  
   
  你可以将线程写进该对话框类内部,在   OnInitilDlg   (   )中启动线程,   然后在线程中访问对话框中的进度条,控制它变化Top

3 楼wongflying(网飞飞)回复于 2004-08-01 21:28:03 得分 0

建议采取无模式对话框,或者通过消息来通知对话框当前进度条的位置!Top

4 楼flyelf(空谷清音)回复于 2004-08-01 21:50:00 得分 3

1、使用非模式对话框来实现进度  
  2、如果使用模式对话框,则可以在该对话框中用线程完成任务,而主界面更新进度Top

5 楼lostiger(傅立叶变换)回复于 2004-08-07 12:01:08 得分 0

谢谢大家  
    这几天没能上网    
         
        我按照大家的   建议   在线程里面使用了   非模式对话框    
   
        UINT   CMobileComm::MobileThread(LPVOID   lpParam)  
      {  
            ...........  
            ProgessDlg   =   new   CProgDlg(   );  
            AfxMessageBox("对话框1");  
            if(   ProgessDlg->Create(IDD_MY_PROGDLG,   p->m_powner)   ==   TRUE   )  
              AfxMessageBox("对话框2");  
            ProgessDlg->ShowWindow(SW_SHOW);  
            ...........  
        }  
   
  p->m_powner是对话框(进度条对话框)的父窗口     我把它指向程序的CMainFrame  
   
  但是每次显示的时候   对话框总是在   程序的左上角显示出来   不知道怎么样调整它的位置  
   
  还有   每次运行的时候都出这个错误:  
          Debug   Assertion   Failed!  
          File:   wincore.cpp  
          line:   883  
   
        我看了   wincore.cpp的883行   是这个语句:  
        ASSERT((p   =   pMap->LookupPermanent(m_hWnd))   !=   NULL   ||  
  (p   =   pMap->LookupTemporary(m_hWnd))   !=   NULL);  
   
  向请教一下大家这是怎么回事?Top

6 楼21bird(世纪笨鸟:csdn的blog啊啥时能不出错?!)回复于 2004-08-07 18:47:40 得分 3

>>但是每次显示的时候   对话框总是在   程序的左上角显示出来   不知道怎么样调整它的位置  
   
  将对话框的父窗口设为程序主窗口(比如mainframe)就可以了。Top

7 楼21bird(世纪笨鸟:csdn的blog啊啥时能不出错?!)回复于 2004-08-07 18:48:38 得分 0

哦,忘了一句:还要在对话框资源的属性里设下那个cente~Top

8 楼lostiger(傅立叶变换)回复于 2004-08-09 09:26:20 得分 0

谢谢  
  这个我已经实现过了  
   
  但是在debug模式下面   总是弹出这个Assert   错误的窗口  
  不知道怎么回事Top

9 楼lostiger(傅立叶变换)回复于 2004-08-09 17:06:38 得分 0

up  
  线程中  
  非模态对话框   create的时候  
  父窗口的指针   应该怎么指定啊?     有什么特别的要求吗?      
   
  Top

10 楼21bird(世纪笨鸟:csdn的blog啊啥时能不出错?!)回复于 2004-08-09 19:17:01 得分 0

Assert   错误的窗口,啥内容?Top

11 楼jiangsheng(蒋晟.Net[MVP])回复于 2004-08-09 20:03:26 得分 10

ASSERT((p   =   pMap->LookupPermanent(m_hWnd))   !=   NULL   ||  
  (p   =   pMap->LookupTemporary(m_hWnd))   !=   NULL);  
  表明你使用了其他线程创建的MFC对象  
  参见http://blog.csdn.net/jiangsheng/archive/2004/01/05/3797.aspxTop

12 楼tryber(Go with the CWnd)回复于 2004-08-09 22:21:57 得分 0

如果你用的vc6.0的话,里面有个Vc组件做得很棒.用Vc6.0生成后可在vc.net用.  
  'project'->'Add   to   project'->'Components   and   Controls'->'Visual   C++   Components'->'Progress   Dialog'  
   
  还是单线实现,一般的应用足矣.  
  Top

13 楼lostiger(傅立叶变换)回复于 2004-08-10 10:00:51 得分 0

To   21bird(世纪菜鸟:sailing)   :  
      ASSERT错误:  
          还有   每次运行的时候都出这个错误:  
          Debug   Assertion   Failed!  
          File:   wincore.cpp  
          line:   883  
   
        我看了   wincore.cpp的883行   是这个语句:  
        ASSERT((p   =   pMap->LookupPermanent(m_hWnd))   !=   NULL   ||  
  (p   =   pMap->LookupTemporary(m_hWnd))   !=   NULL);  
   
  向请教一下大家这是怎么回事?  
  Top

14 楼lostiger(傅立叶变换)回复于 2004-08-10 10:24:03 得分 0

谢谢:   jiangsheng(蒋晟.MSMVP2004Jan)   :  
   
          我看了:http://support.microsoft.com/default.aspx?scid=kb;en-us;147578  
           
          这里面说线程里面不能传递mfc   对象,   但是句柄是可以的  
   
          是不是说   我在线程里面创建   非模态的对话框的时候   不能将对话框的父窗口指定为   主界面线程的框架对象呢?  
          我将父窗口指定为   NULL   则没有错误    
          但是这个对话框   不受控制     还可以操做主界面   不能起到阻塞主界面的作用Top

15 楼jiangsheng(蒋晟.Net[MVP])回复于 2004-08-10 13:30:37 得分 0

当然  
  你可以用CWnd::FromHandle来创建一个本线程内的句柄对象映射Top

16 楼21bird(世纪笨鸟:csdn的blog啊啥时能不出错?!)回复于 2004-08-11 15:48:04 得分 0

lostiger(傅立叶变换)   :  
  不好意思,没看全,没看到你上面已经说了我还问:$Top

相关问题

  • 请问:VC中,怎样做到弹出进度条对话框,进度条完了自动关闭对话框?
  • 弹出对话框
  • 对话框弹出
  • 弹出对话框
  • ........弹出对话框
  • 如何使用alter弹出含有"确定"和"取消"按钮的对话框?
  • 弹出对话框问题
  • 如果弹出对话框?
  • 有关弹出对话框,
  • 弹出对话框问题?

关键词

  • .net
  • 线程
  • 界面
  • 模式
  • cpp
  • 对话框
  • thedlg
  • cprogdlg
  • pmap
  • 弹出

得分解答快速导航

  • 帖主:lostiger
  • zhucde
  • flyelf
  • 21bird
  • jiangsheng

相关链接

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

广告也精彩

反馈

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