请大家帮帮忙,这个问题都困扰了我一周了。就是解决不了。很急,公司急着用
我的程序是工业上用的数控系统,窗体可以切换。我在其中一个窗体中运行程序。中间暂停,切换到另一个窗体,然后在回到先前的窗体中。我在第一个窗体中建了几个自定义的按钮控件。可是当我退出在回到原窗体继续运行程序时,会出现一个断言错误。错误代码为
_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错误,到底怎么回事。高手指点一下。

解决方案 »

  1.   

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

  2.   

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

  3.   

    获取句柄可用CWnd::GetSafeHwnd
    HWND GetSafeHwnd( ) const;注意,它属于CWnd类成员函数。