我自己生成一个类,是派生自CWnd的,我在这个类里建立了WM_TIMER消息。我在dlg类下生成了之前定义的这个类的对象,然后调用此对象的OnTimer(),结果编译都通过,但是运行就出错。// CMyTimerTest.h 
class CMyTimerTest : public CWnd
{
//{{AFX_MSG(CMyTimerTest)
afx_msg void OnTimer(UINT nIDEvent);
//}}AFX_MSGDECLARE_MESSAGE_MAP()
}
// CMyTimerTest.cpp
void CMyTimerTest::OnTimer(UINT nIDEvent) 
{
if (nIDEvent == 1){ // do sth....}
}
// CDlgTestDlg.h
class CDlgTestDlg : public CDialog
{
   CMyTimerTest mtt;
}
// CDlgTestDlg.cpp
void CDlgTestDlg::OnTimer(UINT nIDEvent) 
{
// do sth...CDialog::OnTimer(nIDEvent);
}void CDlgTestDlg::OnButtonSet() 
{
mtt.SetTimer(1,1000,NULL);
}
而且,我设置了断点,结果在AFXASERT.CPP中,
BOOL bResult = _CrtDbgReport(_CRT_ASSERT, lpszFileName, nLine, NULL, NULL); 
这句过不去.....
请问,我该如何设置?

解决方案 »

  1.   

    我本意是想做成个类似多线程的那种。
    尝试用两个Timer来做,结果就出这样的问题。
    -_-!另外,我看有人也层出现我这问题,但是他那问题是发生在SDI的情况下,我于是照猫画虎,又在此基础上,把Create()加了来,结果发现还是不行。void CDlgTestDlg::OnButtonSet() 
    {
    mtt.Create(this);
    mtt.SetTimer(1,1000,NULL); }BOOL CMyTimerTest::Create(CWnd *pParentWnd)
    {
    BOOL bSuccess;

    // Must have a parent
    ASSERT(pParentWnd != NULL);

    bSuccess = CreateEx(NULL, m_szClass, NULL, WS_POPUP, 0, 0, 0, 0, pParentWnd->GetSafeHwnd(), NULL, NULL);

    m_pParentWnd = (CMainFrame*)pParentWnd;  // 这里不知道该怎么改
    return bSuccess;
    }其中:
    LPCTSTR m_szClass;
    CMainFrame* m_pParentWnd;

    上面的Create()是我找到的那段代码,麻烦哪位能给解释下。。
      

  2.   

    关于线程,看看《win32多线程程序设计》吧
    这个不错。
      

  3.   

    我想是不是因为你重载了基类的OnTimer函数而出现问题呢,自己换个函数,在基类的OnTimer函数里调用你的函数