有一个基于对话框的应用程序(给客户演示功能的Demo).有[启动]和[关闭退出]等多个按钮(当然对话框上还有[X], 点击时, 也可以关闭窗口).[启动]按钮中有一些上电, 开串口, 开线程等操作.
[关闭退出]按钮中有一些关电, 关串口, 关线程等操作.
当然OnDestroy()中也可以放关电, 关串口, 关线程等操作.
void CXXXXDlg::OnDestroy()
{
   关电, 关串口, 关线程等操作.
}
关电, 关串口, 关线程等操作, 是放在OnDestroy() 中好呢, 还是放在[关闭退出]按钮中好呢?

解决方案 »

  1.   

    我是放在OnClose()里
    The framework calls this member function as a signal that the CWnd or an application is to terminate. The default implementation calls DestroyWindow.
      

  2.   

    试过了, 放在 OnClose() 中, 调用不到.
      

  3.   

    都可以。WM_CLOSE在窗口即将关闭时触发,此时窗口和控件尚未销毁。如果退出时,还需要涉及到窗口或控件的操作,要在 WM_CLOSE中进行,
    因为 WM_DESTORY 触发时,窗口已经销毁,是无法进行任何涉及到窗口或控件的操作了。
      

  4.   

    对于非模态窗口,其关闭过程如下:
    OnClose()->OnCancel()->DestroyWindow()->OnDestroy()->OnNcDestroy()//仅表示时间先后如果"关闭退出"按钮触发OnClose(),那放在哪儿都可以,否则还是放在OnDestroy()好些,
      

  5.   

    我说的是WinCE 下的VC应用.
    WinCE 下对话框(对话框程序)右上角(Title位置)上有[OK][X]二个小按钮.以下代码处分别设置了断点.当点击[OK]关闭窗口时, 只执行了void CTestCloseDestoryDlg::OnDestroy().当点击[X]关闭窗口时, 先后执行了void CTestCloseDestoryDlg::OnClose() 和 void CTestCloseDestoryDlg::OnDestroy().
      

  6.   

    接上面....void CTestCloseDestoryDlg::OnClose()
    {
    // TODO: Add your message handler code here and/or call default
    g_iNo = 2; CDialog::OnClose();
    }void CTestCloseDestoryDlg::OnDestroy()
    {
    CDialog::OnDestroy();
    // TODO: Add your message handler code here
    g_iNo = 3;
    }