我在对话框里加了一个按钮,设置单击它时候再生成一个新的按钮,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);
不太明白这是什么意思,这问题怎么解决呢?谢谢!
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);
不太明白这是什么意思,这问题怎么解决呢?谢谢!
这是由于m_btn对象没有释放,再次创建按钮的时候m_btn对象已经关联一个按钮
在创建之前加上if(m_btn.m_hWnd == NULL),防止创建多次按钮,导致错误
ps:不能使用m_btn.Detach()
楼主会不会定义错了?
ASSERT(pWnd->m_hWnd == NULL);//m_btn已经有了?
恩 m_btn已经有了
我在头文件里定义的是:
private:
CButton m_btn;
应该没错。
我用的是VS2008
先销毁它 m_btn.DestroyWindow();
就可以了。
别搞错了。
m_btn->Create()......