Назад | Начало урока | Вперед
Содержание

День 6

Добавление в приложение диалоговых окон для взаимодействия с пользователем

Сегодня вы научитесь :

Вверх

Использование существующих (системных) диалоговых окон

Windows предоствляет большое количество существующих диалоговых окон. Простейшие - message boxes (окна сообщений) Они показывают пользователю сообщение и предлагают для выбора от одной до трех кнопок.

Есть и другие окна - диалоги.Например окна File Open,Save, Print. Эти диалоговые окна создаются и используются посредством объявления переменной, представляющей подходящий класс С++, и последующего взаимодействия с экземпляром класса


Вверх

Окна сообщений

Для отображения окна сообщения на экране, достаточно вызвать соответствующую функцию, передав ей в качестве аргумента текст сообщения. На экране появится окно с текстом сообщения и возможно пиктограммой, в котором пользователю предлагается для подтверждения щелкнуть по кнопке. Можно создать естественно и другие окна сообщений с различгым набором кнопок и различными пиктограммами.

Подсказка

Вверх

Функция MessageBox

Функции MessageBox можно передавать один, два или три аргумента.

Кроме того функция MessageBox возвращает значение, показывающее на какой из кнопок щелкнул пользователь.
Таким образом получая третий аргумент и возвращая результат, функция MessageBox обеспечивает широкие возможности для приложений.

При передаче функции MessageBox третьего аргумента, определяющего кнопки или пиктограмму, второй параметр ( заголовок) становится обязательным.

Количество используемых в MessageBox сочетаний кнопок ограничено и перечислено ниже в таблице 6.1.Создать свою комбинацию кнопок нельзя, но можно сделать собственное диалоговое окно, похожее на окно сообщения.

Таблица 6.1 Идентификаторы комбинации кнопок в функции MessageBox

Идентификатор (ID) Кнопки (Buttons)
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

Эти идентификаторы будут указываться в качестве третьего параметра.

Чтобы определить пиктограмму, отображаемую в окне сообщения, можно применить операцию ИЛИ к идентификатору пиктограммы и идентификатору сочетания кнопок.Если нужно задать что-то одно - либо сочетание кнопок либо пиктограмму, а другое оставить по умолчанию, то можно указать только один идентификатор.

Таблица 6.1 Идентификаторы пиктограмм в функции MessageBox

Илентификатор Пиктограмма
MB_ICONINFORMATION Информационное сообщение
MB_ICONQUESTION Вопросительный знак
MB_ICONSTOP Знак остановки
MB_ICONEXLAMATION Восклицательный знак

Если при вызове функции MessageBox указывается сочетание кнопок, то нужно получить возвращаемое значение, чтобы определить на какой кнопке щелкнул пользователь.Возвращаемые значения являются целочисленными, их идентификаторы приведены в таблице 6.3

Таблица 6.3 Идентификаторы результатов, возвращаемых функцией MessageBox

Идентификатор Кнопка, на которой щелкнул пользователь
IDABORT Прервать
IDRETRY Повторить
IDIGNORE Пропустить
IDYES Да
IDNO Нет
IDOK OK
IDCANCEL Отмена
IDTRYAGAIN Повторить попытку
IDCONTINUE Продолжить

Примечание:
Функция MessageBox является членом класса CWnd и потому она доступна только для потомков данного класса.

Если нужно открыть окно сообщения из класса, не являющегося потомком CWnd, используйте другую версию этой функции под именем AfxMessageBox. У нее нет параметра задающего заголовок окна сообщения - на экране будут отображены только текст сообщения, пиктограмма и кнопки.


Вверх

Создание диалогового приложения
  1. Создайте макет приложения как обычно и согласно картинке.

    Подсказка

  2. Задайте значения свойств элементов управления согласно таблице 6.4

    Таблица 6.4 Значения свойств элементов управления.
    Объект Свойство Значение
    Command Button ID
    Caption
    IDC_BYESNOCANCEL
    &Yes, No, Cancel
    Command Button ID
    Caption
    IDC_BFILEOPEN
    &File open
    Command Button ID
    Caption
    IDC_BABORTRETRYIGNORE
    &Abort, Retry, Ignore
    Command Button ID
    Caption
    IDC_BCUSTOMDIALOG
    &Custom Dialog
    Command Button ID
    Caption
    IDC_BWHICHOPTION
    &Which option (какая опция?)
    Command Button ID
    Caption
    IDC_BEXIT
    E&xit
    Static Text Caption Dialog Result
    Edit Control ID
    Multiline
    Auto Scroll
    IDC_ERESULTS
    True
    True

  3. Свяжите переменные с элементами управления, как указано в таблице 6.5

    Таблица 6.5

    IDC_ERESULTS m_strResults Value CString Public
    IDC_BWHICHOPTION m_cWhichOption Control Control Public

  4. Назначьте для кнопки Exit функцию, обрабатывающую событие BN_CLICED, и добавьте код для закрытия приложения.

    Вверх

    Программирование кнопок окна сообщения.
  5. В окне Properies перейдите на вкладку Control Event и создайте функцию обрабатывающую событие -щелчек на кнопках Yes, No, Cancel. Отредактируйте функцию для этих кнопок вставив код из листинга 6.1

    Листинг 6.1


    void CDialogsDlg::OnBnClickedByesnocancel()
    {
    int iResults;
    iResults = MessageBox("Press the Yes, No, or Cancel button ",
    "Yes, No Cancel Dialog", MB_YESNOCANCEL | MB_ICONINFORMATION);

    switch(iResults)
    {

    case IDYES:
    m_strResults = "Yes, Yes, Yes";
    break;

    case IDNO:
    m_strResults = "No, No, No, no";
    break;

    case IDCANCEL:
    m_strResults = "Sorry, canceled";
    break;
    }

    UpdateData(FALSE);
    }

    Откомпилируйте и запустите приложение и вы увидите что работа приложения зависит от выбора кнопки в окне сообщения.

  6. Используя Class Wizard добавьте функцию, обрабатывающую щелчок на кнопкх Abort, Retry, Ignore, и введите код из листинга 6.1, подставив значения MB_ABORTRETRYIGNORE и MB_ICONQESTION и изменив приглашения и текст сообщения.

    Листинг 6.1


    void CDialogsDlg::OnBnClickedBabortretryignore()
    {
    int iResults;
    iResults = MessageBox("Press the Abort, Retry, Ignore button ",
    "Abort, Retry, Ignore Dialog", MB_ABORTRETRYIGNORE || MB_ICONQESTION);

    switch(iResults)
    {

    case IDABORT:
    m_strResults = "Abort, Abort, Abort";
    break;

    case IDRETRY:
    m_strResults = "Retry, Retry, Retry";
    break;

    case IDIGNORE:

    m_strResults = "Ignore, Ignore, Ignore";
    break;
    }

    UpdateData(FALSE);

    }

    Теперь понятно как использовать другое сочетание кнопок.

Обе функции обрабатывающие события от элементов управления на самом деле идентичны.В каждой из них объявляется целочисленная переменная для хранения результата, возвращаемого функцией MessageBox. В качестве аргументов функции MessageBox передается :

  • текст сообщения, которое нужно показать пользователю,
  • заголовок окна сообщения,
  • а так же идентификаторы сочетания кнопок и пиктограммы.

    Возвращаемое функцией MessageBox значение передается оператору выбора switch.Сообщение отображаемое в главном окне приложения, показывает пользователю какая кнопка была выбрана в окне сообщения.

    Для управления выполнением программы, основанного на пользовательском выборе, можно применить один или два условных оператора if, но целочисленное возвращаемое значение все же удобнее проверять операторм выбора switch.

    Откомпилировав и запустив приложение , можно щелкнуть на любой из двух верхних кнопок и увидеть окно сообщения типа Message Box.

    Подсказка

    Если щелкнуть на одной из кнопок окна сообщения, то в поле редактирования главного окна приложения появится собщение, показывающее какая кнопка была выбрана.Так как переменная m_strResults у нас была ассоциирована с полем редактирования EditBox.


    Назад | Начало урока | Вверх | Вперед
    Содержание

    Hosted by uCoz