解决方案 »

  1.   

    按钮BN_CLICKED通知响应函数中PostMessage(WM_CLOSE);之后是会调用到CDialog::OnCancel虚函数中的。
      

  2.   

    一:按钮ID改为IDCANCEL
    二:按钮点击事件中,直接调用CDialog::OnCancel()
      

  3.   

    在按钮ID不是IDCANCEL的情况下应该怎样处理?
      

  4.   

    没看明白。能否把具体映射过程写一下?按钮ID不是IDCANCEL
      

  5.   

    那你把cpp文件中这个按钮点击事件的消息响应的函数名改为OnCancel呢?
      

  6.   

    就是这样:
    ON_BN_CLICKED(IDC_BUTTON1, OnCancel)
    我试了一下,是可以的
      

  7.   

    我目的是想在定时器ontimer中销毁一个非模态对话框,OnCancel函数应该不能在定时器中调用吧?
      

  8.   

    我目的是想在定时器ontimer中销毁一个非模态对话框,OnCancel函数应该不能在定时器中调用吧?可以
      

  9.   

    我目的是想在定时器ontimer中销毁一个非模态对话框,OnCancel函数应该不能在定时器中调用吧?可以
    我在定时器中调用oncancel:
    void CSetTimeDlg::OnTimer(UINT_PTR nIDEvent)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nIDEvent==REMIND) //定时提醒
    {
    KillTimer(REMIND);
    OnCancel();
    CRemindDlg *pTD = new CRemindDlg();  
    pTD->Create(IDD_DIALOG_REMIND); //创建一个非模态对话框  
    pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框  //销毁非模态对话框
    //  ((CCountProDlg*)m_pParentWnd)->m_dlgS=NULL;
    // 
    //  DestroyWindow(); //删除对话框
    } CDialogEx::OnTimer(nIDEvent);
    }
    程序运行到
    void CSetTimeDlg::PostNcDestroy()
    {
    // TODO: 在此添加专用代码和/或调用基类

    CDialogEx::PostNcDestroy();
    delete this;
    }
    出现死机现象:
      

  10.   

    CRemindDlg *pTD = new CRemindDlg();  
    pTD->Create(IDD_DIALOG_REMIND); //创建一个非模态对话框  
    pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框 你这又是要干嘛
    你到底想干什么?
    调用OnCancel肯定是没有问题的
    你调试一下报错具体原因是什么
      

  11.   

    兄弟,搞清楚,你到底要销毁哪个对话框???
    你在CSetTimeDlg类的定时器直接调用OnCancel,销毁的是CSetTimeDlg,你是这么想的吗?
      

  12.   

    那你起码也得放到函数的末尾吧,否则我估计CDialogEx::OnTimer(nIDEvent);会出问题
    还有一个问题是:CRemindDlg *pTD = new CRemindDlg(); 这个指针怎么释放呢?
      

  13.   

    这个报错可能是因为delete this;没有用对地方,在void CSetTimeDlg::PostNcDestroy()中使用delete this,销毁的是之前在某处new的CSetTimeDlg对象,如果没有new就在这里delete,就会报这个错。当然报这个错误的原因可能是别的。
      

  14.   

    你的 CSetTimeDlg::OnCancel()怎么写的?
      

  15.   

    谢谢你!!问题解决了,果然是“那你起码也得放到函数的末尾吧,否则我估计CDialogEx::OnTimer(nIDEvent);会出问题”,放末尾就好了。
    “CRemindDlg *pTD = new CRemindDlg(); 这个指针怎么释放呢?”这个指针在CRemindDlg类的一个按钮映射的函数中释放了。