我在一个非模态对话框中的某个按钮响应函数里开启了一个定时器,然后在OnTimer处理中:void CPrepareDlg::OnTimer(UINT_PTR nIDEvent)
{
    if (PRE_TIMER_ID == nIDEvent)
    {
        DestroyWindow();
    }    CDialog::OnTimer(nIDEvent);
}    我的疑惑是:定时器一到我就DestroyWindow,把这个非模态对话框销毁了,那下面的CDialog::OnTimer(nIDEvent)执行会不会有问题?

解决方案 »

  1.   

    你这种做法我也遇到过,别自己销毁,SendMessage( WM_CLOSE );就行。
    另外还得加个虚函数PostNcDestroy,在里面delete this;这样就不会内存泄露了。
      

  2.   

    谢谢。是的,我是想过个5秒钟自动让这个对话框关闭掉。
    不过我对WM_CLOSE也是就一句:DestroyWindow()。
    我创建这个子模态对话框时用的是父对话框的私有成员:
    private:
        CPrepareDlg m_prepareDlg;
    所以就不用delete this了
      

  3.   

    不会吧,非模态对话框不就是用DestroyWindow来销毁的吗?我只是不知道在定时器里这么用行不行。
      

  4.   

    DestroyWindow()调用了之后,CDialog::OnTimer(nIDEvent);有没有问题?还是说如果DestroyWindow了我就不调CDialog::OnTimer(nIDEvent)了?