如何使用CPropertyPage :: OnOk()阻止我的MFC对话框窗口关闭?

时间:2011-04-08 13:39:18

标签: c++ mfc

我正在开发一个C ++项目并使用CPropertyPage::OnOk()方法。

我想要发生的是当用户点击确定应用时,程序将执行检查,如果检查错误,它会产生压力关闭的窗口。

我怎样才能让窗户停止关闭?

我尝试了一次简单的回归,但没有去。

例如:

void CApptEditGen::OnOK() 
{
    if ( prealloc(&m_ai->apapallocate) || Dummy_aftalloc(m_ai) == REDO ) {
        m_pCtl_ApptEdit_Units->SetFocus();
        m_pCtl_ApptEdit_Units->SetWindowText("");
        return;
    }
    CPropertyPage::OnOK();  
}

2 个答案:

答案 0 :(得分:2)

使用以下内容检查值A>值B然后返回0以停止关闭!

BOOL CApptEditGen::OnKillActive()
{
    CString inpValue;
    m_pCtl_ApptEdit_Units->GetWindowText(inpValue);
    if (atoi(inpValue) > freeUnitsAvailable)
        return 0;

    return CPropertyPage::OnKillActive();
}

答案 1 :(得分:1)

一个简单的返回应该可以解决问题,正如下面this page on MSDN中的代码片段所示,该代码片段描述了CDialog的OnOK()函数(从中派生出CPropertyPage):

/* MyDialog.cpp */
#include "MyDialog.h"

void CMyDialog::OnOK() 
{
   // TODO: Add extra validation here

   // Ensure that your UI got the necessary input 
   // from the user before closing the dialog. The 
   // default OnOK will close this.
   if ( m_nMyValue == 0 ) // Is a particular field still empty?
   {
      AfxMessageBox("Please enter a value for MyValue");
      return; // Inform the user that he can't close the dialog without
              // entering the necessary values and don't close the 
              // dialog.
   }

   CDialog::OnOK(); // This will close the dialog and DoModal will return.
}

您是否确定在CPropertyPage上正确覆盖了OnOK()?如果没有,则将调用默认的CPropertyPage :: OnOK,这将在您描述时关闭窗口。