我在对话框里加了一个按钮,设置单击它时候再生成一个新的按钮,m_btn 是个private的CButton对象
void CTestDlg::OnBnClickedBtnAdd()
{
m_btn.Create(_T("Weixin"), BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD, CRect(0,0,100,100), this, 2);
}
调试的时候还好,当运行出现界面后,点击该按钮报错,说有Assersion failure,位置在 f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp Line 638, 继续Debug后停顿在一句代码上 ASSERT(pWnd->m_hWnd == NULL);
不太明白这是什么意思,这问题怎么解决呢?谢谢!

解决方案 »

  1.   

    pWnd->m_hWnd == NULL应该是窗口没有初始化完毕
      

  2.   

    pWnd->m_hWnd == NULL应该是窗口没有初始化完毕
      

  3.   

    ASSERT(pWnd->m_hWnd == NULL);//m_btn已经有了?
      

  4.   

    单击一次的时候,是没问题的,当第二次单击产生新的按钮的时候,就出错了。
    这是由于m_btn对象没有释放,再次创建按钮的时候m_btn对象已经关联一个按钮
    在创建之前加上if(m_btn.m_hWnd == NULL),防止创建多次按钮,导致错误
    ps:不能使用m_btn.Detach()
      

  5.   

    m_myButton.Create(_T("Weixin"), BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD, CRect(0,0,100,100), this, 2)m_myButton 是CButton 类的一个对象 完全正确 VC 6.0 环境
      

  6.   

    在VS2005下测试时没有问题的啊,定义为CButton m_btn;
    楼主会不会定义错了?
      

  7.   

    [Quote=引用 4 楼 schlafenhamster 的回复:]
    ASSERT(pWnd->m_hWnd == NULL);//m_btn已经有了?
    恩 m_btn已经有了
      

  8.   


    我在头文件里定义的是:
    private:
    CButton m_btn;
    应该没错。
    我用的是VS2008
      

  9.   

    测试了一下在6.0会错,就是5楼说的原因,可以
    先销毁它  m_btn.DestroyWindow();
    就可以了。
      

  10.   

    恩 问题好像就是不管是怎么样,系统好像在一开始创建窗口的时候就默认地创建了一个CButton对象,m_btn.m_hWnd一开始就不为空。这好像就是VS2008才有的情况
      

  11.   

    记住ASSERT(pWnd->m_hWnd == NULL);//m_btn已经有了!
    别搞错了。 
      

  12.   

    m_btn = new CButton;
    m_btn->Create()......