我自己有个类,因为要接收消息,所以它继承了CDialog,和另一个数据处理基类,
在create它之后,我设了一个定时器,如下
this->SetTimer(10, 50, NULL);
在 void CMyDo::OnTimer(UINT nIDEvent)
{
CDialog::OnTimer(nIDEvent);}函数里面,发现this指数的 句柄是???
然后报错。请问为什么?

解决方案 »

  1.   

    这个我不是很清楚。但是我一般是直接这样用SetTimer(10, 50, NULL); 
    用完了直接KillTimer(10);
      

  2.   


    void CMyDo::CreatWnd(UINT nID, BOOL bSelf)
    {
    this->Create(nID);
    this->ShowWindow(SW_HIDE);

    this->SetTimer(10, 50, NULL);
    }
    我是外部调用CreatWnd函数的,确定是创建对话框了
      

  3.   

    void CMyDo::CreatWnd(CMyDo* pMydo,UINT nID, BOOL bSelf) 把this指针传进去再调用
      

  4.   


    创建对话框是异步的,你这个时候调用很有可能对话框还没有创建成功
    你可以调试试一下,在settimer之前加一个日志打印一下当时的句柄是什么重载OnInitDialog函数,在OnInitDialog函数中调用this->SetTimer(10, 50, NULL); 这个试试
      

  5.   

    确定设置定时器之前句柄已经存在了,在onInitDialog里面调用也是一样报错
      

  6.   

    刚刚我用
    CRect rect( 0, 0, 245, 170 );
    CreateEx(WS_EX_TOOLWINDOW, AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_CROSS)), _T("Gracer"), WS_POPUP, rect, NULL, NULL, NULL );来创建对话框,在OnCreate里也报错了