| Figure 6 CMainDlg::OnOK
////////////////// // User pressed OK: validate form and display results: error message // or field values—but don't call base class to end dialog. // void CMainDlg::OnOK() { UpdateData(TRUE); // get dialog data
int nBad = m_rgxForm.Validate(); // validate CString msg; if (nBad>0) { vector<UINT> badFields = m_rgxForm.GetBadFields(); BOOL beep = TRUE; if (nBad>1) { // Multiple bad fields: show message box with bad fields. msg = _T("The following fields are bad:\n\n"); vector<UINT>::iterator it; for (it = badFields.begin(); it!=badFields.end(); it++) { UINT nID = *it; CString s; s.Format(_T("%s: %s\n"), m_rgxForm.GetFieldName(nID),m_rgxForm.GetFieldErrorMsg(nID)); msg += s; } MessageBox(msg,_T("Oops—Some fields are bad."),MB_ICONEXCLAMATION); beep = FALSE; // message box already beeped; don't beep again } // to highlight first bad field whether one or many UINT nID = badFields[0]; m_rgxForm.ShowBadField(nID, beep, TRUE);
} else { // all fields OK: show feeback msg = _T("You Entered:\n\n"); for (int i=0; MyRegexForm[i].id; i++) { CString name = m_rgxForm.GetFieldName(MyRegexForm[i].id); CString val = m_rgxForm.GetFieldValue(MyRegexForm[i].id); if (val.IsEmpty()) val = _T("(nothing)"); CString temp; temp.Format(_T("%s = %s\n"), name, val); msg += temp; } MessageBox(msg,_T("Congratulations! All fields OK."),MB_OK); m_rgxForm.Feedback(_T(" All fields OK or empty!")); } }
|