用MessageBox()产生的消息对话框,当点击上面的“取消”时,属性页对话框也被关闭,现在是想实现如何不让属性页对话框关闭

解决方案 »

  1.   

    判断消息框的返回值来决定是否调用属性页的CDialog::OnOK()void CProp::OnOK()
    {
        if(::MessageBox(m_hWnd,_T("空缺部分将使用默认值"),_T("消息提示"),MB_OKCANCEL) == IDCANCEL)
               return;
        CDialog::OnOK();
    }
      

  2.   

    还是不行,我的程序流程是这样的:
    当我点击属性页上的“确定”时,用messagebox弹出一个消息询问对话框,当再点击询问对话框上的“取消”时,两个对话框都关闭了,现在是想不关闭属性页对话框;感觉属性页对话框上的“确定”按钮触发的关闭属性对话框,就是不知道如何更改
      

  3.   

    把最后的CPropertyPage::OnOK();移动到case IDOK:后面就行
      

  4.   

    简直无语了void CMyFunctionsDlg::OnBnClickedButton2()
    {
    // TODO: Add your control notification handler code here
    int msg = MessageBox(_T("Text"),_T("caption"),MB_ICONQUESTION|MB_OKCANCEL);
    switch(msg)
    {
    case IDOK:CDialog::OnOK();break;
    case IDCANCEL:break;
    }
    }这是我写的一个测试,对话框按钮按下后弹出一个带“确定”和“取消”的消息框,点确定后消息框和对话框都退出了,点“取消”则消息框退出而对话框还在要不你的工程传上来看看,传到你的资源里
      

  5.   

    我用的是CPropertySheet和 CPropertyPage
    类创建的属性页,我是先点击属性页上的“确定”,弹出消息对话框后,再点击消息对话框上的“取消”,两个对话框同时消失,想实现只消失消息对话框
      

  6.   

    我知道原因了,你函数最后一句 CPropertyPage::OnOK(); 其实没什么意义
    最关键的是,你应该从CPropertySheet派生一个类CMySheet,然后重写他的OnOK函数:
    void CMySheet::OnOK()
    {
    if(MessageBox("Hello World","Tip",MB_OKCANCEL)==IDCANCEL)
    return;
    CPropertySheet::EndDialog(IDOK);
    }如果你没重写这个函数,那不管怎么样都是会执行CPropertySheet::EndDialog(IDOK);导致属性页退出
      

  7.   

    我的程序中就是让CPropSheet继承的CPropertySheet类,然后再用两个表单继承CPropertyPage类,添加到CPropSheet中,但是CPropSheet没有OnOK()重载项啊
      

  8.   

    看过你的代码了,应该这么改(点确定关闭属性页,点取消不关闭属性页)
    在CAnalysisOptions下重写函数OnApply(),这个函数会调用OnOK;
    之后需要把原来OnOK的代码剪切复制到OnApply下。
    为方便看,我把没用到的变量都删掉了。需要的话自己再加吧。BOOL CAnalysisOptions::OnApply()
    {
    CString VAR_EDIT[VAR_COUNT] 
    //判断变量名是否为空
    static BOOL flag = FALSE;
    for (int i = 0; i < VAR_COUNT; i++)
    {
    if ((VAR_EDIT[i]).IsEmpty())
    {
    flag = TRUE;
    VAR_EDIT[i] = VAR_DEFAULT[i];
    }
    }
    BOOL USINGDEFAULT = FALSE;// 改了这里
    if (flag)
    {
    flag = FALSE;
    int msg = MessageBox("空缺部分将使用默认值","消息提示",MB_OKCANCEL|MB_ICONQUESTION);
    switch(msg)
    {
    case IDOK:
    USINGDEFAULT = TRUE;// 改了这里
    break;
    case IDCANCEL:
    USINGDEFAULT = FALSE;// 改了这里
    break;
    }
    }
    if(USINGDEFAULT)// 改了这里
    //{
    return CPropertyPage::OnApply();// 改了这里
    //}
    else
    return FALSE;// 改了这里
    }
      

  9.   

    属性页CPropertySheet的OK按钮应该是在从它派生出来的类中响应,而不应该是响应在CPropertyPage里面的。
    void CAnalysisOptions::OnOK()这个函数会在按下“确定”后执行,但控制不了属性页的退出与否所以你应该是在CPropSheet中重写OnOK://CPropSheet.h
    virtual void OnOK();//CPropSheet.cpp
    ON_COMMAND(IDOK,OnOK)void CPropSheet::OnOK()
    {
    if(MessageBox("Hello World","Tip",MB_OKCANCEL)==IDCANCEL)
    return;
    CPropertySheet::EndDialog(IDOK); 
    }