Как предотвратить закрытие окна моего диалогового окна MFC с помощью CPropertyPage :: OnOk ()? - PullRequest
3 голосов
/ 08 апреля 2011

Я работаю над проектом 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 ]

2 голосов
/ 08 апреля 2011

Используйте следующее, чтобы проверить, если значение A> значение B, а затем вернуть 0, чтобы остановить закрытие!

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

    return CPropertyPage::OnKillActive();
}
1 голос
/ 08 апреля 2011

Простой возврат должен помочь, как показано в фрагменте кода ниже на этой странице в MSDN , который описывает функцию OnOK () CDialog (из которой происходит 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.
}

Вы абсолютно уверены, что правильно переопределили OnOK () на CPropertyPage? Если нет, то будет вызван стандартный CPropertyPage :: OnOK, который закроет окно, как вы описываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...