Опубликован: 17.08.2010 | Доступ: свободный | Студентов: 998 / 59 | Оценка: 4.11 / 3.89 | Длительность: 29:38:00
Самостоятельная работа 2:

Диалоговое окно MFC

Аннотация: Создание и программирование заготовки приложения.Создание обработчика для дочерней кнопки. Создание обработчика для родительского окна.

Создание заготовки приложения

Файлы к данной лабораторной работе, Вы можете скачать здесь.

В диалоговом окне New Project нужно выбрать тип проекта MFC Application, в текстовом поле Name задать имя проекта ( HelloDialog ), в поле ввода Location или через кнопку Browse (Выбрать) задать место расположения папки с проектом. Каждый проект оболочка располагает в отдельной папке с именем проекта. Туда помещаются все вспомогательные файлы и файлы с кодом программы. Итоговый загрузочный (исполняемый) модуль программы (файл с расширением .exe ) также будет носить имя проекта (в нашем случае HelloDialog.exe )

Мастер создания приложений MFC Application Wizard слева имеет список вкладок, позволяющих задать параметры проекта, а справа - сами вкладки с элементами управления проектом. В зависимости от типа создаваемого проекта те или иные опции на вкладках мастера будут заблокированы.

Первая вкладка Overview (Обзор) отображает параметры проекта, установленные в данный момент

  • Откройте вкладку Application Type (Тип приложения) и включите радиокнопку Dialog based (Основанное на диалоге)
  • Если в раскрывающемся списке Resource language нет языка Русский, то оставьте эту установку как есть. Позднее вручную мы настроим файл ресурсов на правильное восприятие приложением надписей на русском языке
  • Остальные настройки вкладки Application Type оставьте в состоянии по умолчанию
  • Откройте вкладку User Interface Features (Возможности пользовательского интерфейса) и заполните текстовое поле Dialog title содержимым заголовка Диалоговое приложение MFC

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

  • Щелкните на кнопке Finish и мастер приложений создаст папку с именем проекта и запишет в нее все необходимые для проекта файлы

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

  • Раскройте панель Resource View и настройте ресурсы на русский язык. Для этого раскройте все узлы дерева ресурсов и последовательно выделяя каждый узел в окне Properties из раскрывающегося списка Language выберите Русский

В заключение нужно подправить заголовок приложения, если он исказился при создании проекта. Для этого

  • Раскройте панель Resource View и двойным щелчком по узлу IDD_HELLODIALOG_DIALOG дерева ресурсов вызовите редактор Dialog Editor. Появится форма диалоговой панели
  • Выделите форму и через панель свойств Properties установите в свойстве Caption требуемый заголовок

Построение каркаса приложения мастером MFC Application Wizard на этом закончено. Это работоспособное приложение, но оно пока имеет минимальную функциональность.

  • Постройте приложение и убедитесь, что представление окна имеет вид

Программирование заготовки приложения

Создание программы включает в себя два этапа:

  1. Визуальное проектирование
  2. Написание кода

Подработаем наш проект и наполним его некоторой функциональностью, а именно:

  1. Уберем статический текст на панели с дежурной надписью " TODO: Place dialog controls here "
  2. Уменьшим диалоговую панель
  3. Изменим надписи на кнопках на русские " Выполнить " и " Отмена "
  4. Разместим в центре элемент управления Static Text и под ним элемент Edit Control из панели инструментов Toolbox
  5. Сделаем так, чтобы после ввода текста в поле редактирования и нажатии на кнопке " Выполнить " появлялось диалоговое окно с введенным текстом
    • Уберите дежурную надпись, щелкнув на ней и нажав клавишу Delete или в контекстном меню команду Delete
    • Уменьшите диалоговую панель, выделив ее и потянув за маркер в нижнем правом углу
    • Измените надписи на кнопках после их поочередного выделения и вызова панели свойств клавишей F4. В поле Caption поменяйте значения "OK" и " Cancel " на русские " Выполнить " и " Отмена "

Вспомним, что во всех ресурсах приложения мы установили язык Русский.

  • Из панели Toolbox поместите на форму текстовое поле Edit Control и текстовую метку Static Text
  • Выровняйте элементы пользовательского интерфейса относительно панели и друг друга с помощью панели инструментов редактора диалоговых окон Dialog Editor. Он расположен в верхней части окна проектирования ниже системного меню и стандартной панели и имеет вид
     Панель инструментов редактора диалоговых окон

    Панель инструментов редактора диалоговых окон
  • Щелкните на кнопке Test Dialog панели инструментов редактора диалоговых окон, чтобы получить визуальное представление пользовательской формы без компиляции всего приложения

Теперь нужно связать поле ввода, кнопку " Выполнить " и библиотечное диалоговое окно сообщений AfxMessageBox() или MessageBox() между собой так, чтобы после ввода сообщения в поле ввода и нажатии кнопки " Выполнить " появлялось бы стандартное диалоговое окно сообщений с набранным текстом.

Введем вспомогательную переменную m_strText, в которой будем сохранять содержимое поля ввода и выводить его в стандартном диалоговом окне сообщений.

  • Выделите правой кнопкой мыши текстовое поле Edit Control на шаблоне диалогового окна и через контекстное меню выполните пункт Add Variable, чтобы запустить мастер Add Member Variable Wizard
  • Настройте мастер в соответствии с рисунком и щелкните на кнопке Finish

Для того, чтобы посмотреть, что сделал мастер при добавлении переменной m_strText, выполните следующее:

  • Вызовите окно поиска и замены комбинацией клавиш Ctrl+F или командой Edit/Find and Replace/Quick Find меню оболочки и настройте его в соответствии с рисунком

Перемещаясь по ссылкам окна Find and Replace мы видим, что мастер переменных включил описание переменной в класс CHelloDialogDlg одноименного заголовочного файла

Объявление переменной в классе CHelloDialogDlg
class CHelloDialogDlg : public CDialog
{
  ....................................................
public:
  // Содержимое текстового поля
  CString m_strText;
};

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

Функция обмена данными между текстовым полем и переменной
void CHelloDialogDlg::DoDataExchange(CDataExchange* pDX)
{
  CDialog::DoDataExchange(pDX);
  DDX_Text(pDX, IDC_EDIT1, m_strText);
}

В конструкторе класса мастер создал код инициализации переменной пустым значением

Инициализация переменной в конструкторе класса CHelloDialogDlg
CHelloDialogDlg::CHelloDialogDlg(CWnd* pParent /*=NULL*/)
  : CDialog(CHelloDialogDlg::IDD, pParent)
  , m_strText(_T(""))
{
  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
  • Задайте вручную в конструкторе класса свой начальный текст для текстового поля
Инициализация переменной в конструкторе класса CHelloDialogDlg
CHelloDialogDlg::CHelloDialogDlg(CWnd* pParent /*=NULL*/)
  : CDialog(CHelloDialogDlg::IDD, pParent)
  , m_strText(_T("Элемент текстового поля"))
{
  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

Теперь свяжем событие нажатия кнопки " Выполнить " с функцией обработки этого события, в которой передадим содержимое поля ввода, сохраненное системой в промежуточной переменной, диалоговому окну сообщений.

Александр Даниленко
Александр Даниленко
Стоит Windows 8 Pro, Visual Studio 2010 Express Edition .