我创建一个POPUP类型的窗口,类名为CWndClass,它继承于CWnd,我创建一个线程在窗口上画图。当时间到时,我在父窗口的代码中把窗口销毁了.销毁代码如下
pWnd->ShowWindow(SW_HIDE); //pWnd指向CWndClass的一个指针
pWnd->DestoryWindow();
Delete pWnd;
pWnd = NULL;在CWndClass的析构函数里
CWndClass::~CWndClass()
{
   while (m_bThreadRunning)
      Sleep(100);
  做其它操作.....................
}

CWndClass::OnTimer(nIDEvent)
{
  m_bThreadRunning = false;
}
在线程结束的后面调用::SetTimer(m_hWnd, (UINT_PTR)m_hWnd, 10, 0);上面的意思是想等线程结束的时候,才删除窗口对象。
我的问题是问,问什么程序线程结束,执行SetTimer函数,但OnTimer没有响应??????

解决方案 »

  1.   

    你用了几个定时器?如果一个定时器的画还好说,如果是多个的话,不用指明nIDEvent?
      

  2.   

    我是在线程哪里只调用一次SetTimer().只有一个。
      

  3.   

    在窗口的析构函数里窗口已经销毁掉了,只是窗口对象还在,OnTimer不会响应了
      

  4.   

    To iamyxn,
    但我在虚构函数哪里判断的时候,是判断m_hWnd是否为空,但它不是空的呀。
      

  5.   

    请问stjay
    窗口好像还存在呀。我都没有用DestroyWindow了。
      

  6.   

    都到析构函数了 m_hWnd也是无效的,能不能在窗口的OnDestory里等待线程结束呢
      

  7.   

    To stjay
    请问为什么判断m_hWnd不为空,用IsWindow来判断就返回False了?
    To iamyxn
    为什么呀飘在窗口的OnDestory里等待线程结束了?析构函数不行?
      

  8.   

    IsWindow 函数功能:该函数确定给定的窗口句柄是否标识一个已存在的窗口。   函数原型:BOOL IsWindow(HWND hWnd);   参数:   hWnd:被测试窗口的句柄。   返回值:如果窗口句柄标识了一个已存在的窗口,返回值为非零;如果窗口句柄未标识一个已存在窗口,返回值为零。  PS:在窗口对象析构的时候,窗口已经不存在了。
      

  9.   

    To iamyxn
    也就是说,我调用和不调用DestroyWindow,在我delete 对象的时候,在析构函数哪里,它会帮我销毁窗口?
      

  10.   

    在CWndClass中建一个变量,比如:BOOL bStop;
    销毁代码如下
    pWnd->ShowWindow(SW_HIDE); 
    pWnd->bStop = TRUE;在CWndClass完成所有任务后(执行中判断bStop),发送一个消息到父窗口,最后完成窗口销毁及对象的清除