CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

关于无模式对话框的创建

楼主csdn_2002(vc小混混)2002-04-23 11:17:37 在 VC/MFC / 基础类 提问

我用单击按钮,引发无模式对话框的创建,  
  CShipinDlg   *dlg=new   CShipinDlg;  
  dlg->Create(IDD_DIALOG1,NULL);  
  dlg->ShowWindow(SW_SHOW);  
  但是当我为按钮等控件添加变量之后,运行结果出错  
  Debug   Aessertion   Failed  
  忽略之后,出现“试图执行系统不支持操作”!  
  请问各位高手,究竟是什么问题?我模式对话框是不是有哪些特殊的属性/要求?  
  万分感谢! 问题点数:30、回复次数:39Top

1 楼iceneve(暗星云)回复于 2002-04-23 11:26:25 得分 25

假如CShipinDlg已经邦定到IDD_DIALOG1,  
  即CShipinDlg的构造函数调用了基类构造函数CDialog(IDD_DIALOG1,null),  
  则会出现Debug   Aessertion   Failed。  
   
  应该:  
  CShipinDlg::CShipinDlg():   CDialog()  
  {  
  }  
   
  然后重载虚函数Create()  
  return   TRUE;即可Top

2 楼shan_hy()回复于 2002-04-23 11:36:58 得分 0

CShipinDlg   *dlg=new   CShipinDlg(this);Top

3 楼csdn_2002(vc小混混)回复于 2002-04-23 11:40:15 得分 0

楼上的,不对阿!我试过了!Top

4 楼iceneve(暗星云)回复于 2002-04-23 11:49:48 得分 0

class   CViewDetailDlg   :   public   CDialog  
  {  
  //   Construction  
  public:  
    CViewDetailDlg();       //   standard   constructor  
    //   Dialog   Data  
    //{{AFX_DATA(CViewDetailDlg)  
    enum   {   IDD   =   IDD_VIEWDETAIL   };  
    //   NOTE:   the   ClassWizard   will   add   data   members   here  
    //}}AFX_DATA  
    //   Overrides  
    //   ClassWizard   generated   virtual   function   overrides  
    //{{AFX_VIRTUAL(CViewDetailDlg)  
    public:  
    virtual   BOOL   Create(CWnd*   pParentWnd   =   NULL);  
    protected:  
    virtual   void   DoDataExchange(CDataExchange*   pDX);   //   DDX/DDV   support  
    //}}AFX_VIRTUAL  
   
  //   Implementation  
  protected:  
  //   Generated   message   map   functions  
  //{{AFX_MSG(CViewDetailDlg)  
  //}}AFX_MSG  
  DECLARE_MESSAGE_MAP()  
  };  
   
  //////////////////////////////////////////////  
  ///////////////////////////////////////////  
  CViewDetailDlg::CViewDetailDlg():   CDialog()  
  {  
  //{{AFX_DATA_INIT(CViewDetailDlg)  
  //   NOTE:   the   ClassWizard   will   add   member   initialization   here  
  //}}AFX_DATA_INIT  
  }  
  BOOL   CViewDetailDlg::Create(CWnd*   pParentWnd)  
  {  
      return   CDialog::Create(IDD,   pParentWnd);  
  }  
   
  可以了。  
   
  调用时:  
  CShipinDlg   *dlg=new   CShipinDlg;  
  dlg->Create(this);//   or   dlg->Create();  
  dlg->ShowWindow(SW_SHOW);  
  Top

5 楼lonelywood(独木)回复于 2002-04-23 15:04:57 得分 0

把这个函数加上  
  virtual   BOOL   Create(UINT   nID,   CWnd*   pParentWnd   =   NULL);  
   
   
  BOOL   CxxxxxDlg::Create(UINT   nID,   CWnd*   pParentWnd)  
  {  
  return   CDialog::Create(IDD,   pParentWnd);  
  }  
   
  微软居然不自动生成这个函数,这是我烦微软的地方。Top

6 楼csdn_2002(vc小混混)回复于 2002-04-23 15:11:45 得分 0

看到答复,我很高兴,可是具体的操作,我还是不清楚。能再具体点嘛?多谢了!Top

7 楼bluecrest(高歌)回复于 2002-04-23 16:14:32 得分 0

CShipinDlg   *dlg=new   CShipinDlg;  
  dlg->Create(IDD_DIALOG1,NULL);  
  dlg->ShowWindow(SW_SHOW);  
  但是当我为按钮等控件添加变量之后,运行结果出错  
  Debug   Aessertion   Failed  
  //用editplus看看那一行错了,设置断点看看那一句错了  
   
  错误很好找的,你是不是在对象为产生时或者析构掉时去赋值或者其他操作  
   
   
   
  Top

8 楼csdn_2002(vc小混混)回复于 2002-04-24 10:14:57 得分 0

因为编译什么的都没错啊!我怀疑还是无模式对话框的创建出了问题!我留意了一下以前的提问,类似的问题也很多啊!希望了解的高手给点意见啊!我再把问题说一下!  
  先定义全局变量   CShipinDlg   *dlg;      
      初始化中:dlg=new   CShipinDlg;    
      dlg->Create(IDD_DIALOG1,NULL);  
      dlg->ShowWindow(SW_SHOW);  
  运行后,单击按钮,无对话框出现,反而出现Debug   Assertion   Failed错误!  
  希望大家帮忙!Top

9 楼shan_hy()回复于 2002-04-24 12:21:21 得分 0

对话框属性中的visible选项你选了没有,如果没选,对话框出不来的Top

10 楼csdn_2002(vc小混混)回复于 2002-04-24 12:25:51 得分 0

不是啊!主要是Debug   Assertion   Failed错误!  
  究竟是什么原因啊!大家救命啊!Top

11 楼ls(ls)回复于 2002-04-24 12:29:47 得分 0

其实很简单的  
  你的这句:dlg->Create(IDD_DIALOG1,NULL);  
  有问题呀,第二个参数不能为空,他是指你要创建的窗体的父窗体,所以这里应该是父窗体的指针;比如,你是要给当前窗体创建的话,可以给   this     就行了  
   
  "对话框属性中的visible选项你选了没有,如果没选,对话框出不来的"也是必须的Top

12 楼pRiCH()回复于 2002-04-24 12:37:58 得分 0

直接new   ***(this)  
  然后this指针就是父窗口,也就是你的view  
  然后后面的null就不要了  
  Top

13 楼pRiCH()回复于 2002-04-24 12:39:42 得分 0

你在创建的时候,给他new   CShipinDlg(this);  
  然后this就是你的父窗口指针,也就是你的工作view  
  然后后面的null就不要了Top

14 楼csdn_2002(vc小混混)回复于 2002-04-24 12:40:53 得分 0

楼上的,我照着做了,可还是不行啊!还有什么办法呢?Top

15 楼King_Play(程序猎人)回复于 2002-04-24 12:49:58 得分 0

我用单击按钮,引发无模式对话框的创建,  
  CShipinDlg   *dlg=new   CShipinDlg;  
  dlg->Create(IDD_DIALOG1,NULL);  
  dlg->ShowWindow(SW_SHOW);  
  但是当我为按钮等控件添加变量之后,运行结果出错  
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~  
  你是指为你单击的按钮添加变量还是你要弹出的按钮?  
   
  我曾经使用无模式对话框和你的方法完全一样,没有一点儿问题呀。  
  不过我的无模式对话框中的控件都没有映射变量。Top

16 楼csdn_2002(vc小混混)回复于 2002-04-24 12:54:14 得分 0

楼上的,是这样的!  
  我的程序在没添加变量之前也是可以的!但是我不得不添加变量,现在就遇到了这个问题!  
  大家说的我都一一试过了,但还是这样,希望大家再帮我想想!多谢了!Top

17 楼yu_hl(卖柴火的小男孩)回复于 2002-04-24 12:58:51 得分 0

把代码给我。  
  hlyu@mail.ustc.edu.cnTop

18 楼csdn_2002(vc小混混)回复于 2002-04-24 13:01:19 得分 0

楼上的,你也太热情了!这个恐怕不行啊!相关的我也都已经贴出来了!Top

19 楼yu_hl(卖柴火的小男孩)回复于 2002-04-24 13:17:47 得分 0

相关代码恐怕在你的dialog定义与实现里。Top

20 楼csdn_2002(vc小混混)回复于 2002-04-24 13:29:16 得分 0

真的就没别的办法了吗?!沮丧!啊!Top

21 楼csdn_2002(vc小混混)回复于 2002-04-24 13:43:49 得分 0

还请大家多帮忙啊!Top

22 楼wolf721()回复于 2002-04-24 14:28:40 得分 0

问题与无模式对话框的创建好象没有多大关系,估计是你为[按钮等控件添加变量]的这些控件中有比较特殊的控件,需要检查一下。Top

23 楼csdn_2002(vc小混混)回复于 2002-04-24 14:40:58 得分 0

可我的控件就一些按钮啊!  
  我添加变量也只是为了给按钮弄个图片啊!  
  真的不懂了!求教阿!Top

24 楼ukyoking(累)回复于 2002-04-24 14:54:53 得分 0

你可以看看assertion   failed出现在哪个文件的哪一行,再判断哪出了问题,遇到问题要多动脑筋Top

25 楼csdn_2002(vc小混混)回复于 2002-04-24 15:05:48 得分 0

大哥!我是看了,可那不是我的文件,怎么知道阿!Top

26 楼ukyoking(累)回复于 2002-04-24 15:11:27 得分 0

老兄,你笨的可以,那个文件在vc的安装目录下有,assertion报错时会指出具体位置,你看它assert到那一句了,就是问题所在Top

27 楼chenzhou35(vcworm.51.net)回复于 2002-04-24 15:19:13 得分 5

检查你的  
  void   CxxxDlg::DoDataExchange(CDataExchange*   pDX)中是否有不存在或已经删除的变量,如果有,删除相应的DDX就行了。  
   
   
  ========================  
  欢迎光临我的网站:  
   
  http://vcworm.51.net  
  Top

28 楼csdn_2002(vc小混混)回复于 2002-04-24 15:27:37 得分 0

谢谢楼上的,我看过了,没有!  
  2楼的,我真的很笨!麻烦你说清楚点!Top

29 楼chenzhou35(vcworm.51.net)回复于 2002-04-24 15:48:21 得分 0

出ASSERT的时候,选择重试,程序会停在出问题的语句上(当然,问题可能是别的地方引起的)。  
   
  阅读此段程序,看它是想检查什么(一般,系统使用ASSERT来提示一些非法的参数等等。)如果能看明白就能知道为什么出错了。如果看不明白,就把这段程序贴出来,大家看看。  
   
   
  ========================  
  欢迎光临我的网站:  
   
  http://vcworm.51.net  
  Top

30 楼csdn_2002(vc小混混)回复于 2002-04-24 15:49:12 得分 0

还有什么意见啊!给我说说吧!Top

31 楼yu_hl(卖柴火的小男孩)回复于 2002-04-24 15:51:31 得分 0

在CShipinDlg构造函数,   OnInitDialog里设断点。Top

32 楼csdn_2002(vc小混混)回复于 2002-04-24 15:53:22 得分 0

HWND   CDataExchange::PrepareCtrl(int   nIDC)  
  {  
  ASSERT(nIDC   !=   0);  
  ASSERT(nIDC   !=   -1);   //   not   allowed  
  HWND   hWndCtrl;  
  m_pDlgWnd->GetDlgItem(nIDC,   &hWndCtrl);  
  if   (hWndCtrl   ==   NULL)  
  {  
  TRACE1("Error:   no   data   exchange   control   with   ID   0x%04X.\n",   nIDC);  
  ASSERT(FALSE);  
  AfxThrowNotSupportedException();  
  }  
  m_hWndLastControl   =   hWndCtrl;  
  m_bEditLastControl   =   FALSE;   //   not   an   edit   item   by   default  
  ASSERT(hWndCtrl   !=   NULL);       //   never   return   NULL   handle  
  return   hWndCtrl;  
  }Top

33 楼csdn_2002(vc小混混)回复于 2002-04-24 15:58:10 得分 0

BOOL   CGdiObject::Attach(HGDIOBJ   hObject)  
  {  
  ASSERT(m_hObject   ==   NULL);             //   only   attach   once,   detach   on   destroy  
  if   (hObject   ==   NULL)  
  return   FALSE;  
  CHandleMap*   pMap   =   afxMapHGDIOBJ(TRUE);   //   create   map   if   not   exist  
  ASSERT(pMap   !=   NULL);  
  pMap->SetPermanent(m_hObject   =   hObject,   this);  
  return   TRUE;  
  }Top

34 楼chenzhou35(vcworm.51.net)回复于 2002-04-24 16:02:35 得分 0

应该是DDX的问题了,仔细检查你的  
  void   CxxxDlg::DoDataExchange(CDataExchange*   pDX)中是否有不存在或已经删除的变量,如果有,删除相应的DDX就行了。  
   
  如果没有,检查void   CxxxDlg::DoDataExchange(CDataExchange*   pDX)中是否有不存在的ID,或者有某个ID   的值为0   或   -1  
   
   
   
  ========================  
  欢迎光临我的网站:  
   
  http://vcworm.51.net  
  Top

35 楼csdn_2002(vc小混混)回复于 2002-04-24 16:17:02 得分 0

楼上的,谢谢你!  
  我已经很仔细的检查过了,可还是没有啊!Top

36 楼csdn_2002(vc小混混)回复于 2002-04-24 19:00:40 得分 0

大家就没什么别的想法,可以教教我的嘛?Top

37 楼halcyon(让我们共同进步)回复于 2002-04-24 19:09:28 得分 0

upTop

38 楼itluck()回复于 2002-04-24 20:07:54 得分 0

问题应该在DDX,你好好查查变量之间的映射关系Top

39 楼csdn_2002(vc小混混)回复于 2002-04-24 20:08:07 得分 0

希望大家积极发言!我一直在线等待!请大家再帮帮我!谢谢了!Top

40 楼zzdaa(是否你还记得我?)回复于 2002-04-24 20:20:53 得分 0

检查一下你的对话框属性,是不是设置成child了,改成popup看一下Top

相关问题

  • 一个奇怪的问题(创建无模式对话框)
  • 关于在DLL中创建无模式对话框的问题。
  • 如何创建一个无模式对话框?
  • 如何创建和使用无模式对话框
  • 请问无模式子对话框创建后,主对话框怎么向其传递参数?
  • 无模式对话框!!!急
  • 用CreateDialog创建非模式对话框
  • 怎样回收无模式对话框创建后使用的内存!
  • 有谁知道这样创建一个无模式对话框?拜托了!
  • 动态创建的无模式对话框是否会导致资源泄露?

关键词

  • .net
  • 控件
  • 函数
  • 模式
  • 检查
  • cshipindlg
  • 对话框
  • cviewdetaildlg
  • dlg
  • 按钮

得分解答快速导航

  • 帖主:csdn_2002
  • iceneve
  • chenzhou35

相关链接

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

广告也精彩

反馈

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