+ -
当前位置:首页 → 问答吧 → CFormView afxwin2.inl中的Invalidate()问题

CFormView afxwin2.inl中的Invalidate()问题

时间:2011-12-19

来源:互联网

请大家帮帮忙,这个问题都困扰了我一周了。就是解决不了。很急,公司急着用
我的程序是工业上用的数控系统,窗体可以切换。我在其中一个窗体中运行程序。中间暂停,切换到另一个窗体,然后在回到先前的窗体中。我在第一个窗体中建了几个自定义的按钮控件。可是当我退出在回到原窗体继续运行程序时,会出现一个断言错误。错误代码为
_AFXWIN_INLINE void CWnd::Invalidate(BOOL bErase)
{ ASSERT(::IsWindow(m_hWnd)); ::InvalidateRect(m_hWnd, NULL, bErase); }
我跟踪了一下发现,这个时候与控件关联的成员变量值改变了,也就是按钮控件的m_hwnd变了,怎么回事啊。我看了看OnInitialUpdate(),在这里值还没有改变呢,
高手指点一下。

我的大体程序是,启动运行后,我通过设定的一个全局变量使程序进入一个循环中。while(Paused){}
当我点暂停后,Paused为true;函数出在一个无限循环中。切换当前窗体,然后在切换回来后,点继续按钮,使paused为false,在往下运行的时候就出现了错误,与按钮控件关联的成员变量的m_hwnd值改变了,导致Invalidate错误,到底怎么回事。高手指点一下。

作者: lzz4513   发布时间: 2011-12-19

怎么都没有人在啊,高手,高手指点

作者: lzz4513   发布时间: 2011-12-19

任务管理器-》GDI对象是多少??看看这个。。。

作者: shen_wei   发布时间: 2011-12-19

我的系统是WinCE的,而且我发现一个问题,就是我在切换窗体的时候如果跳出循环,把缓冲区运动关闭,就不会出现这样的问题,我还没试验是哪个原因造成的,什么原因会造成自定义按钮关联的成员变量m_hwnd改变呢

作者: lzz4513   发布时间: 2011-12-19

我这个问题真的很急,高手指点一下吧,这次答对立马给分,谢谢大家

作者: lzz4513   发布时间: 2011-12-19

唉,怎么都没有人离我啊,
其实关键问题就在与,我的暂停是采用的无限循环,在切换窗体的时候,在返回后,窗体应该是被重建了一次,可这个时候在无限循环中控件关联的成员变量的句柄已经为空了,怎么回事呢,怎样重获成员变量值啊,
这个问题怎么避免呢,

作者: lzz4513   发布时间: 2011-12-20

获取句柄可用CWnd::GetSafeHwnd:
C/C++ code
HWND GetSafeHwnd( ) const;


注意,它属于CWnd类成员函数。

作者: fight_in_dl   发布时间: 2011-12-20

谁能解释一下,为什么这个时候控件关联的成员变量句柄和窗体句柄都为空了呢,我在把窗体切换回来的时候,窗体重建了,是不是无限循环还没有变,还停留在以前那啊。怎样解决呢,我的暂停必须要采用这个循环,

作者: lzz4513   发布时间: 2011-12-20