我是新手,照着书上的例子编程在对话框上创建一个按钮。编译没有问题,运行时却出现:Debug Assertion Failed!后边还有什么什么wincore.cpp Line:638之类的。调试了一天,也在网络上差了不少资料,有人说是指针或堆栈问题,但没有细说,我还是不大回弄。 
我的ide是vs2008。先是创建了一个基本对话框的应用程序Ex_DlgCtrls,然后为CEx_DlgCtrlsDlg类创建了一个CButton类型的成员变量m_btnWnd。接着在Cex_DlgCtrlsDlg的函数OnInitDialog函数中添加了如下代码: 
m_btnWnd.Create("你好",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(20,20,120,60),this,201);  //创建 
CFont *font=this->GetFont();          //获取对话框的字体 
m_btnWnd.SetFont(font);  //设置控件字体 
然后就保存,编译,没有问题。但运行就出了上述说的问题。我跟踪程序时,发现程序运行到上面那三行代码的第一行的时候就出问题了,但不会改。 
具体的project我保存在邮箱的附件里了(我不知道为什么不能用这例的附件,只好注册了个邮箱,地址是[email protected],密码123456,里面收件箱名叫“工程代码”的邮件就是了)。 
先感谢大家的帮忙了。

解决方案 »

  1.   

    登录不上去``[email protected]
      

  2.   


    那个邮箱不知道为什么上不去了--!我又注册了个,地址是[email protected],密码123456
      

  3.   

    还是登录不上去``把代码打包发送到偶邮箱吧``[email protected]
      

  4.   


    恩,发过去了,project文件。谢谢你的帮忙。
      

  5.   

    在 Create 之前添加判断
    if (btnWnd.GetSafeHwnd() == NULL)
      

  6.   


    按钮应该是在对话框创建之前创建的` 这是修改后的``
    [code=C/C]
    int CEx_DlgCtrlsDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CDialog::OnCreate(lpCreateStruct) == -1)
    return -1; // TODO:  ÔÚ´ËÌí¼ÓÄúרÓõĴ´½¨´úÂë
    m_btnWnd.Create("你好",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(20,20,120,60),this,201); //创建
    CFont *font=this->GetFont(); //获取对话框的字体
    m_btnWnd.SetFont(font); //设置控件字体 return 0;
    }
    [/code]
      

  7.   

    这是错误的,应该放在OnCreate中处理``可能我刚刚回复的不清楚``这是补充`
      

  8.   


    有点晕,我需要先在类里添加一个OnCreate函数么?在对话框之前创建按钮,就是说在OnInitDialog函数中先执行OnCreate再执行CDialog::OnInitDialog()吗?那个参数LPCREATESTRUCT lpCreateStruct我也不知道是什么呢。有点不大会改。