我做了个属性表单,期望用户在点属性页上的取消按钮时,弹出一个对话框,提示用户是否真的要取消。可是,我发现不论用户如何选择,属性页最终还是消失了。请问,这个如何解决?

解决方案 »

  1.   

    你可以增加一个IDCCANCEL 的响应函数,然后把调用基类的函数做相应处理。
    或者把那按钮的ID改一,不是IDCCANCEL 就行。
      

  2.   

    重载OnCancel事件把CProeretyPage::OnCancel这句话去掉即可,不过我不记得了是CProeretyPage::OnCancel还是CDialog::OnCancel了
      

  3.   

    回2楼3楼兄弟的话。我是把属性表单最终做成了向导对话框的形式,即在DoModal之前直接调用了SetWizardMode()函数。那个上一步啊下一步啊取消啊这些按钮是向导自己生成的,因此,没有ID的概念。
    3楼兄弟说重载OnCancel,这个我最开始就是这么考虑的,可是就算把重载的这个函数里的代码全部注释,也即注释掉了CProeretyPage::OnCancel,仍然是一点取消,窗口消失。
      

  4.   

    1楼要的代码,因为是MFC程序,给代码太麻烦。我就把我做的过程说一下吧。先插入两个属性页,分别创建对应的类CProp1和CProp2,它们的基类都是CPropertyPage.然后新建一个类CPropSheet,基类为CPropertySheet,在这个类中添加两个成员变量,分别是CProp1 m_prop1和CProp2 m_prop2,然后在构造函数中用AddPage(&m_prop1);AddPage(&m_prop2)。之后,在菜单上创建一个菜单项,相应菜单项的命令于View中,在这个响应函数中,有如下语句:
    CPropSheet dlg("123");
    dlg.SetWizardMode();
    dlg.DoModal();
    为了能阻止向导对话框在第一步点取消按钮后直接消失窗口,我在CProp1类中重写了OnCancle()函数:
    void CProp1::OnCancel()
    {
    // TODO: Add your specialized code here and/or call the base class //CPropertyPage::OnCancel();
    }
    整个过程就是这样的。可是始终无法在第一步阻止这个取消效果。
      

  5.   

    没用过,也许应该重载CPropSheet的OnCancel()。
      

  6.   

    回楼上:CPropSheet有OnCancel()吗?它并不是CDialog派生出来的啊。
    很急哦,麻烦高手们多指教一下。
      

  7.   

    响应IDOK消息或者是IDCANCEL消息了。
      

  8.   

    回楼上的,这里的取消按钮是向导对话框自己生成的,我不知道如何响应IDOK消息或者是IDCANCEL消息。而且,也确实找不到这个消息原型。