我从CWnd派生了一个类,并给这个类添加了定时器消息处理,但在SetTimer(id,interval,NULL)这个函数调用的地方无法通过,总是弹出程序终止的对话框并终止了程序。
    单步调试发现是在SetTimer(id,interval,NULL)这个函数调用的地方,进入到AFXWIN2.INL文件,在其中的“ASSERT(::IsWindow(m_hWnd));”这一句就发生了上面的现象。
    是不是因为m_hWnd为空或者它的值不是一个窗口所以才会这样的?(当然,在实际运行中这个变量的值确实是空的,因为没必要给它赋值哦。难道一定要给它赋值吗?)
    请高手指点!

解决方案 »

  1.   

    ASSERT(::IsWindow(m_hWnd))断言代表窗口没创建成功。必须创建了才行。lz,m_hWnd为空当然不行了。
      

  2.   

    你的Handle是无效的,先CWnd创建出来, new一下还不够,要Create
    参考
    BOOL Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
      

  3.   

    楼上说的对,要create ,貌似你也可以直接使用Windows的setTimer这个函数嘛,
      

  4.   

    有窗口才能处理消息,没有创建窗口的话settimer就显得没有意义了.............