MFC断言ASSERT(::IsWindow(m_hWnd))

一个HomeWork的单文档MFC工作空间,新建了一个继承CWnd的CNew类,
在CNew中
重写void CNew::OnPaint()
{

CPaintDC dc(this);
dc.MoveTo(0,0);
dc.LineTo(300,300);

}
定义 void CNew::Clear()
{ InvalidateRect(NULL,TRUE); }
然后新增一个菜单项Clear,添加菜单命令相应函数
void CHomeWorkView::OnCLear()
{
new.Clear();//new 已经定义成CHomeWork的成员变量
}
出现这种错误:
_AFXWIN_INLINE void CWnd::InvalidateRect(LPCRECT lpRect, BOOL bErase)
{ ASSERT(::IsWindow(m_hWnd)); ::InvalidateRect(m_hWnd, lpRect, bErase); }
求大神帮帮忙,我在百度上搜了很久了,没找到解决方案,有一个方案是这样的

---------------->>>我遇到的情况是,A类的Clear函数中调用了this->Invalidate();,而B类调用了A类的Clear函数,此时A类还未实例化,所以A类句柄为空,m_hWnd = NULL。我的解决方法是将A类的实例化放在B类前,问题解决。,<<<--------------

没办法,还是没解决掉,故而来求大神解决了,我才刚刚学MFC

mfc

4个回答

如果你是想在视图上绘制,是不必新加一个CNew窗口的,可以直接在 CHomeWorkView::OnDraw()中进行绘制。
如果你一定要增加一个CNew窗口,那么只是在CHomeWork中定义new变量是不行的,new对应的窗口并没有创建出来,
还要在CHomeWork::OnCreate中调用new.Create来创建出窗口。

u010136054
mdotK 我是想在新类中用InvalidateRect来刷新CHomeWorkView(基于单文档的)的窗口,不知道这样行不行。 我是跟着视频做贪吃蛇里面碰到断言错误的,然后我自己又新建了一个工程CHomeWork来测试,也会出现这种错误 你这么一说我去InitDialog(贪吃蛇是基于对话框的)里面看到了这么一句, m_snake.CreateEx( WS_EX_CLIENTEDGE, _T("SNAKEMAP"), NULL, WS_VISIBLE | WS_BORDER | WS_CHILD, CRect( 0, 0, 325, 425 ), this, SNAKEMAP ); GetDlgItem( SNAKEMAP )->SetFocus(); 我之前没加上,视频也没讲,我看的是王浩写的Visual C++游戏开发案例实战 谢谢你啦,因为现在还很菜,这个new.Create我都不会用额! 另外想请教你,我这种零基础的该看些什么书比较好呢 ,能给我推荐下吗? 现在只看了一遍孙鑫的VC++深入详解 ^_^ ,不胜感激!
4 年多之前 回复

new是否是一个有效的窗口?是不是已经关闭或者释放了。

u010136054
mdotK 谢谢你!是deg936说的那种
4 年多之前 回复

先判断new的窗口句柄是否为NULL,为NULL就调用Create创建先

u010136054
mdotK 谢谢你!是deg936说的那种
4 年多之前 回复

我是想在新类中用InvalidateRect来刷新CHomeWorkView(基于单文档的)的窗口,不知道这样行不行。
我是跟着视频做贪吃蛇里面碰到断言错误的,然后我自己又新建了一个工程CHomeWork来测试,也会出现这种错误
你这么一说我去InitDialog(贪吃蛇是基于对话框的)里面看到了这么一句,
m_snake.CreateEx( WS_EX_CLIENTEDGE, _T("SNAKEMAP"), NULL, WS_VISIBLE | WS_BORDER | WS_CHILD,
CRect( 0, 0, 325, 425 ), this, SNAKEMAP );
GetDlgItem( SNAKEMAP )->SetFocus();

我之前没加上,视频也没讲,我看的是王浩写的Visual C++游戏开发案例实战

谢谢你啦,因为现在还很菜,这个new.Create我都不会用额!
另外想请教你,我这种零基础的该看些什么书比较好呢 ,能给我推荐下吗?
现在只看了一遍孙鑫的VC++深入详解 ^_^ ,不胜感激!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!