При работе с большинством приложений возникают ситуации, когда приложение запрашивает от пользователя некоторую информацию. В большинстве случаев для запроса открывается новое окно. Такие окна называются диалоговыми. Диалоговые окна обычно содержат несколько элементов управления и текст с пояснениями о запрашиваемой информации. В них нет такой обширной пустой рабочей области, как в редакторах.
В библиотеке MFC (как и в других подобных библиотеках) заготовлены некоторые виды типовых диалоговых окон для взаимодействия с пользователем:
Простые диалоговые окна сообщений реализуются двумя функциями
Назначение параметров по порядку:
Сочетание кнопок и пиктограмм, определяемых третьим параметром (у функции AfxMessageBox() - вторым), предопределено, поэтому если необходимо что-то иное, придется создать свое диалоговое окно, похожее на стандартное. Ниже приведены все возможные значения третьего параметра
Идентификаторы комбинации кнопок в третьем параметре функции MessageBox() | |
---|---|
Идентификатор | Кнопки |
MB_ABORTRETRYIGNORE | Три кнопки: Abort (Прервать), Retry (Повторить), Ignore (Пропустить) |
MB_OK | Кнопка OK |
MB_OKCANCEL | Две кнопки: OK, Cancel (Отмена) |
MB_RETRYCANCEL | Две кнопки: Retry (Повторить), Cancel (Отмена) |
MB_YESNO | Две кнопки: Yes (Да), No (Нет) |
MB_YESNOCANCEL | Три кнопки: Yes (Да), No (Нет), Cancel (Отмена) |
MB_CANCELTRYCONTINUE | Три кнопки: Cancel (Отмена), Try Again (Повторить попытку), Continue (Продолжить) |
Идентификаторы пиктограмм в третьем параметре функции MessageBox() | |
---|---|
Идентификатор | Пиктограммы |
MB_ICONINFORMATION | Информационное сообщение |
MB_ICONQUESTION | Вопросительный знак |
MB_ICONSTOP | Знак остановки |
MB_ICONEXCLAMATION | Восклицательный знак |
Если при вызове функции окна сообщений указывается сочетание кнопок, то нужно получить возвращаемое значение, чтобы определить, по какой кнопке щелкнул пользоватаель. Возвращаемые значения являются целочисленными и их идентификаторы приведены в таблице
Идентификаторы результатов, возвращаемый функцией MessageBox() | |
---|---|
Идентификатор | Кнопка, которую выбрал пользователь |
IDABORT | Abort (Прервать) |
IDRETRY | Retry (Повторить) |
IDIGNORE | Ignore (Пропустить) |
IDYES | Yes (Да) |
IDNO | No (Нет) |
IDOK | OK |
IDCANCEL | Cancel (Отмена) |
IDTRYAGAIN | Try Again (Повторить попытку) |
IDCONTINUE | Continue (Продолжить) |
Создайте новый проект C++ на основе MFC и назовите его Dialogs
Ни в коем случае не называйте проекты русскими именами, поскольку оболочка использует имя проекта при автоматической генерации имен файлов проекта и классов. Компилятор из текстов на русском принимает только комментарии и строковые константы.
Для выравнивания элементов диалога включите и пользуйтесь панелью инструментов "Dialog Editor" оболочки
При выравнивании группы элементов отметьте, что первый из выделенных элементов группы является опорным: все остальные элементы подравниваются под него. Точное перемещение элементов выполняйте стрелками клавиатуры. Для быстрого просмотра результатов визуального проектирования пользуйтесь кнопкой Test Dialog панели инструментов Dialog Editor оболочки.
Обработчик для щелчка по первой кнопке "Да, Нет, Отмена" void CDialogsDlg::OnBnClickedBYesnocancel() { int iResults; // Для возвращаемого значения MessageBox() // Спросить пользователя iResults = MessageBox( "Щелкните по кнопке\nДа, Нет, Отмена"// В области клиента (символ новой строки) ,"Диалог \"Да, Нет, Отмена\"" // Заголовок окна (экраны) ,MB_YESNOCANCEL | MB_ICONINFORMATION // Комбинации кнопок и пиктограмм ); // Определить, по какой кнопке щелкнул пользователь switch(iResults){ // переключатель case IDYES: m_strResult = "Да! Да! Да!"; break; case IDNO: m_strResult = "Нет, нет, нет, нет, нет."; break; case IDCANCEL: m_strResult = "Жаль, что \"Отмена\""; // break здесь необязательно, все равно последний } // Выдать на экран UpdateData(FALSE); }