CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

线程中创建动态对话框

楼主jinxuliang(smielfox)2006-03-10 22:21:23 在 VC/MFC / 基础类 提问

想在线程中循环创建非模态对话框.  
  我写了个如下的测试程序:  
   
  UINT   ADOProc(LPVOID   pParam)  
  {  
   
  int   j=0,i=0;  
  while(true)  
  {  
        if(j==0)  
  {  
    for(i=0;i<10;i++)  
  {  
   
    dlg[i]=   new   CDlgWarn;  
   
  dlg[i]->Create(IDD_DIAWARM,AfxGetApp()->m_pMainWnd->GetSafeOwner());  
  dlg[i]->ShowWindow(SW_NORMAL);    
   
  j=100;  
  }  
  }  
  j=100;  
  Sleep(000);  
   
  }  
  return   1;  
  }  
   
  这样创建的非模态对话框,根本就不能操作,我想移动非模态对话框,都不行.而且我是CDlgWarn   *dlg[10];是个全局变量,根本就不是根据需要动态创建.  
  我现在需要在线程中动态创建任意多个非模态对话框;退出后,非模态对话框,依然存在. 问题点数:100、回复次数:9Top

1 楼jinxuliang(smielfox)回复于 2006-03-10 22:24:40 得分 0

Sleep(000);      
  更正写错了  
        Sleep(1000);      
  Top

2 楼striking(庸人自扰)回复于 2006-03-10 22:29:11 得分 20

你这样写出现了什么问题.??  
   
  另外线程里面创建对话框,   最好传递句柄,然后CWnd::FromHandle();返回指针Top

3 楼jinxuliang(smielfox)回复于 2006-03-10 22:35:58 得分 0

re:你这样写出现了什么问题.??  
   
  (1)样创建的非模态对话框,根本就不能操作,我想移动非模态对话框,都不行.  
  (2)不是动态创建Top

4 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2006-03-10 22:45:51 得分 40

你的线程应该是UI线程。也不是说你需要处理消息物质循环。  
   
          //   Start   the   message   loop.    
     
          BOOL   bRet=FALSE;  
          MSG   msg;  
          while(   (bRet   =   GetMessage(   &msg,   NULL,   0,   0   ))   !=   0)  
          {    
                  if   (bRet   ==   -1)  
                  {  
                          //   handle   the   error   and   possibly   exit  
                  }  
                  else  
                  {  
                          TranslateMessage(&msg);    
                          DispatchMessage(&msg);    
                  }  
          }    
  Top

5 楼jinxuliang(smielfox)回复于 2006-03-10 22:58:34 得分 0

你的线程应该是UI线程。也不是说你需要处理消息物质循环。  
  ???  
  你是说我的是UI线程,需要自己处理消息循环是吗?Top

6 楼cyblueboy83(爱情白痴—电脑迷)回复于 2006-03-10 23:29:09 得分 0

关注  
  Top

7 楼Mackz(在相互)回复于 2006-03-10 23:52:37 得分 20

用pParam传入窗口句柄,下面创建的时候以此为父窗口。  
   
  动态创建,就是动态分配一个对话框类指针:  
  CMyDialog   *pDlg   =   new   CMyDialog;  
  pDlg->Create(...);  
  最好用一个列表(CList/CObList)或者数组(CArray/CObArray)来管理。  
  Top

8 楼jinxuliang(smielfox)回复于 2006-03-11 00:29:04 得分 0

俺用了个变通办法  
  在线程里PostMessage  
  在CMainFrame里自定义一个消息处理函数  
  在自定义消息里,创建非模态对话框,问题解决.  
  但是我还是想请,那位大哥给我写个在线程中动态创建对话框的示例,而且在线程退出时,对话框不消失Top

9 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-03-11 03:41:15 得分 20

>在线程退出时,对话框不消失  
  搞笑吧?线程退出不就没消息循环了么?你想要根本就不能操作的对话框?Top

相关问题

  • 急需知道,在工作线程中是否可以动态创建对话框?
  • 如何动态的创建对话框?
  • 在新开的线程里创建对话框出错!
  • 关于在子线程中创建对话框的问题。
  • 在线程中可以创建一个对话框吗?
  • 如何在线程中创建非模式对话框?
  • 关于在线程中创建对话框
  • 在线程中创建对话框的问题。
  • 如何在多线程中创建对话框?
  • 创建的线程中创建对话框为什么就报错?

关键词

  • 线程
  • 消息
  • 循环
  • sleep
  • 对话框
  • 创建
  • 非模态
  • 动态创建
  • bret
  • 退出

得分解答快速导航

  • 帖主:jinxuliang
  • striking
  • DentistryDoctor
  • Mackz
  • jiangsheng

相关链接

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

广告也精彩

反馈

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