我用classwizd新建的了一类,主要是要它能够处理WM_TIMER消息。刚开始我把它的基类选为CWnd,把settimer(1,1000,NULL)函数设在它的构造函数中,killtimer(1)函数设在它的析够函数中,再通过classwizd来处理WM_TIMER消息。但在运行时出现这个问题
    debug assertion failed
.......................................
终止   重试   忽略点击重试出现
_AFXWIN_INLINE UINT CWnd::SetTimer(UINT nIDEvent, UINT nElapse,
void (CALLBACK* lpfnTimer)(HWND, UINT, UINT, DWORD))
{ ASSERT(::IsWindow(m_hWnd)); return ::SetTimer(m_hWnd, nIDEvent, nElapse,
(TIMERPROC)lpfnTimer); }
_AFXWIN_INLINE BOOL CWnd::KillTimer(int nIDEvent)
{ ASSERT(::IsWindow(m_hWnd)); return ::KillTimer(m_hWnd, nIDEvent); }
请问这个怎么解决。我又试图把它的基类设为CCmdTarget但在CCmdtarget中没有成员函数SetTimer和KillTimer只有调用API函数SetTimer和KillTimer.在SetTimer和KillTimer中它的第一个参数是HWND hWnd,
请问在一个新建的窗口类中怎么获得它的句柄?是不是只有窗口类才能处理WM_TIMER消息?谢谢各位了!!!

解决方案 »

  1.   

    SetTimer函数的位置不对!ASSERT(::IsWindow(m_hWnd)); 就表示你的窗口还没有建立好!
      

  2.   

    不要放在构造函数里, 重载它的 OnCreate函数, 放在它的最后
      

  3.   

    对头,重载OnCreate函数,在这里放SetTimer就对了
      

  4.   

    声明那个新窗口类的一个对像  :obMyWnd;
    obMyWnd.m_hWnd;         好像就是这个吧
      

  5.   

    重载它的 OnCreate函数,把SetTimer放里面,把KillTimer放在OnDestroy里面没有了错误信息
    我在CMainframe中构造了次类对象,按理说在构造该类对象的过程中SetTimer就起作用了(我原来在Ontimer函数中调用AfxMessageBox("fds"))但此时并不弹出MessageBox的对话框,Timer还是不起作用啊!请问为什么?