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

Откройте вкладку
Если в раскрывающемся списке Resource language нет языка Русский, то оставьте эту установку как есть. Позднее вручную мы настроим файл ресурсов на правильное восприятие приложением надписей на русском языке
Остальные настройки вкладки Application Type оставьте в состоянии по умолчанию
Откройте вкладку Возможно, что после создания проекта заголовок окна исказится и его нужно будет корректировать после настройки ресурсов на русский язык.
Щелкните на кнопке Finish и мастер приложений создаст папку с именем проекта и запишет в нее все необходимые для проекта файлыПо правой и левой границам окна среды проектирования будут расположены пиктограммы выдвигающихся панелей, обеспечивающих удобный интерфейс для программиста. Любую панель можно включить через меню View, если ее нет на рабочем столе.
Раскройте панель Resource View и настройте ресурсы на русский язык. Для этого раскройте все узлы дерева ресурсов и последовательно выделяя каждый узел в окне Properties из раскрывающегося списка Language выберите РусскийВ заключение нужно подправить заголовок приложения, если он исказился при создании проекта. Для этого
Раскройте панель
Выделите форму и через панель свойств Properties установите в свойстве Caption требуемый заголовокПостроение каркаса приложения мастером MFC Application Wizard на этом закончено. Это работоспособное приложение, но оно пока имеет минимальную функциональность.
Постройте приложение и убедитесь, что представление окна имеет вид
Создание программы включает в себя два этапа:
Подработаем наш проект и наполним его некоторой функциональностью, а именно:
TODO: Place dialog controls here "Static Text и под ним элемент Edit Control из панели инструментов ToolboxDelete или в контекстном меню команду Delete
Уменьшите диалоговую панель, выделив ее и потянув за маркер в нижнем правом углу
Измените надписи на кнопках после их поочередного выделения и вызова панели свойств клавишей F4. В поле Caption поменяйте значения "OK" и " Cancel " на русские " Выполнить " и " Отмена "Вспомним, что во всех ресурсах приложения мы установили язык Русский.
Из панели Toolbox поместите на форму текстовое поле Edit Control и текстовую метку Static Text
Выровняйте элементы пользовательского интерфейса относительно панели и друг друга с помощью панели инструментов редактора диалоговых окон
Щелкните на кнопке 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);
}
Теперь свяжем событие нажатия кнопки " Выполнить " с функцией обработки этого события, в которой передадим содержимое поля ввода, сохраненное системой в промежуточной переменной, диалоговому окну сообщений.
Все элементы управления, находящиеся на форме диалогового окна, являются его дочерними элементами. Они управляются этим родительским окном, наследуют от него стилевые свойства, а также получают от него сообщения операционной системы. Создадим для кнопки " Выполнить " обработчик для вызова стандартного диалогового окна сообщений.
Вызовите контекстное меню для кнопки " Выполнить " на шаблоне диалогового окна и выполните команду Add Event Handler (Добавить обработчик событий), чтобы запустить мастер Event Handler Wizard
Установите значения полей мастера как показано на рисунке и щелкните на кнопке Мастер создаст обработчик события в виде метода
Заготовка обработчика кнопки "Выполнить"
void CHelloDialogDlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
OnOK();
}
Вызов метода OnOK() будет завершать работу диалогового окна.
Одновременно в карте сообщений класса CHelloDialogDlg появится дополнительная строка, связывающая событие ON_BN_CLICKED о нажатии клавиши, имеющей идентификатор IDOK, с функцией-обработчиком OnBnClickedOk()
Карта сообщений класса CHelloDialogDlg с регистрацией обработчика BEGIN_MESSAGE_MAP(CHelloDialogDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDOK, CHelloDialogDlg::OnBnClickedOk) END_MESSAGE_MAP()
Измените код обработчика OnBnClickedOk() на следующийКод обработчика OnBnClickedOk()
void CHelloDialogDlg::OnBnClickedOk()
{
UpdateData(TRUE);
AfxMessageBox(m_strText);
}
В этом обработчике первой строкой кода мы инициируем выполнение функции DoDataExchange(), осуществляющей копирование значения текстового поля (и всех других текстовых полей ввода, если они есть) в промежуточную переменную m_strText, а во второй строке кода вызываем стандартное диалоговое окно сообщений для показа содержимого этой переменной.
Постройте приложение и испытайте его функциональность на данном этапе
Теперь создадим обработчик сообщения для главного окна приложения, перехватывающего сообщения от самой операционной системы. Пусть, когда пользователь дважды щелкнет по клиентской области родительского окна самого приложения, должно появиться уведомление об этом. Здесь для доступа к таким сообщениям редактор дочерних элементов диалогового окна не поможет.
Откройте панель Class View командой View/Class View
Найдите класс CHelloDialogDlg, отвечающий за главное диалоговое окно, выделите его и раскройте вкладку Properties (Свойства)
На вкладке Properties вверху щелкните по пиктограмме Messages (Сообщения)В окне появятся два столбца с перечнем всех сообщений, для которых можно создать обработчики, и перечень имен всех уже созданных обработчиков.
Найдите и выделите сообщение
Добавьте через раскрывающийся список обработчик этого сообщения
Среда сама создаст функцию-член CHelloDialogDlg::OnLButtonDblClk() со стандартным именем и добавит элемент карты сообщений, переадресующий сообщение WM_LBUTTONDBLCLK на вызов этой функции. Карта сообщений станет выглядеть такКарта сообщений класса CHelloDialogDlg после регистрации обработчика BEGIN_MESSAGE_MAP(CHelloDialogDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDOK, CHelloDialogDlg::OnBnClickedOk) ON_WM_LBUTTONDBLCLK() END_MESSAGE_MAP()
Обратите внимание, что среда не позволяет регистрировать обработчики родительского диалогового окна с произвольными именами, а назначает им стандартное имя. По этой причине в карте сообщений нет необходимости связывать для события конкретные элементы с конкретными обработчиками, как это требуется делать для дочерних элементов.
Объявление функции-обработчика помещается в заголовочный файл диалогового окна и имеет вид
Объявление обработчика в заголовочном файле HelloDialogDlg.h
class CHelloDialogDlg : public CDialog
{
.................................................
public:
// Содержимое текстового поля
CString m_strText;
public:
afx_msg void OnBnClickedOk();
public:
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
};
Заготовка функции-обработчика щелчка по диалоговому окну, которую автоматически добавит среда, имеет вид
Обработчик двойного щелчка на родительском диалоговом окне приложения
void CHelloDialogDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnLButtonDblClk(nFlags, point);
}
Скорректируйте заготовку обработчика события родительского диалогового окна такОбработчик двойного щелчка на родительском диалоговом окне приложения
void CHelloDialogDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CString mess;
mess = "Вы выполнили двойной щелчок \n"
"по клиентской области диалогового окна";
CString title;
title = "Это заголовок окна сообщения";
MessageBox(mess, title, MB_ICONSTOP);
CDialog::OnLButtonDblClk(nFlags, point);
}
Постройте приложение, которое после двойного щелчка по клиентской области будет иметь вид
Итак, для каждого добавленного обработчика сообщений среда генерирует код в трех места:
.h.cpp
Создайте командой В диалоговом окне New Project нужно выбрать тип проекта MFC Application, в текстовом поле Name задать имя проекта ( HelloDialog ), в поле ввода Location или через кнопку Browse (Выбрать) задать место расположения папки с проектом.
Каждый проект оболочка располагает в отдельной папке с именем проекта. Туда помещаются все вспомогательные файлы и файлы с кодом программы. Итоговый загрузочный (исполняемый) модуль программы (файл с расширением .exe ) также будет носить имя проекта (в нашем случае HelloDialog.exe )
Мастер создания приложений MFC Application Wizard слева имеет список вкладок, позволяющих задать параметры проекта, а справа - сами вкладки с элементами управления проектом. В зависимости от типа создаваемого проекта те или иные опции на вкладках мастера будут заблокированы.
Первая вкладка (Обзор) отображает параметры проекта, установленные в данный момент

Откройте вкладку
Если в раскрывающемся списке Resource language нет языка Русский, то оставьте эту установку как есть. Позднее вручную мы настроим файл ресурсов на правильное восприятие приложением надписей на русском языке
Остальные настройки вкладки Application Type оставьте в состоянии по умолчанию
Откройте вкладку Возможно, что после создания проекта заголовок окна исказится и его нужно будет корректировать после настройки ресурсов на русский язык.
Щелкните на кнопке Finish и мастер приложений создаст папку с именем проекта и запишет в нее все необходимые для проекта файлыПо правой и левой границам окна среды проектирования будут расположены пиктограммы выдвигающихся панелей, обеспечивающих удобный интерфейс для программиста. Любую панель можно включить через меню View, если ее нет на рабочем столе.
Раскройте панель Resource View и настройте ресурсы на русский язык. Для этого раскройте все узлы дерева ресурсов и последовательно выделяя каждый узел в окне Properties из раскрывающегося списка Language выберите РусскийВ заключение нужно подправить заголовок приложения, если он исказился при создании проекта. Для этого
Раскройте панель
Выделите форму и через панель свойств Properties установите в свойстве Caption требуемый заголовокПостроение каркаса приложения мастером MFC Application Wizard на этом закончено. Это работоспособное приложение, но оно пока имеет минимальную функциональность.
Постройте приложение и убедитесь, что представление окна имеет вид
Создание программы включает в себя два этапа:
Подработаем наш проект и наполним его некоторой функциональностью, а именно:
TODO: Place dialog controls here "Static Text и под ним элемент Edit Control из панели инструментов ToolboxDelete или в контекстном меню команду Delete
Уменьшите диалоговую панель, выделив ее и потянув за маркер в нижнем правом углу
Измените надписи на кнопках после их поочередного выделения и вызова панели свойств клавишей F4. В поле Caption поменяйте значения "OK" и " Cancel " на русские " Выполнить " и " Отмена "Вспомним, что во всех ресурсах приложения мы установили язык Русский.
Из панели Toolbox поместите на форму текстовое поле Edit Control и текстовую метку Static Text
Выровняйте элементы пользовательского интерфейса относительно панели и друг друга с помощью панели инструментов редактора диалоговых окон
Щелкните на кнопке 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);
}
Теперь свяжем событие нажатия кнопки " Выполнить " с функцией обработки этого события, в которой передадим содержимое поля ввода, сохраненное системой в промежуточной переменной, диалоговому окну сообщений.
Все элементы управления, находящиеся на форме диалогового окна, являются его дочерними элементами. Они управляются этим родительским окном, наследуют от него стилевые свойства, а также получают от него сообщения операционной системы. Создадим для кнопки " Выполнить " обработчик для вызова стандартного диалогового окна сообщений.
Вызовите контекстное меню для кнопки " Выполнить " на шаблоне диалогового окна и выполните команду Add Event Handler (Добавить обработчик событий), чтобы запустить мастер Event Handler Wizard
Установите значения полей мастера как показано на рисунке и щелкните на кнопке Мастер создаст обработчик события в виде метода
Заготовка обработчика кнопки "Выполнить"
void CHelloDialogDlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
OnOK();
}
Вызов метода OnOK() будет завершать работу диалогового окна.
Одновременно в карте сообщений класса CHelloDialogDlg появится дополнительная строка, связывающая событие ON_BN_CLICKED о нажатии клавиши, имеющей идентификатор IDOK, с функцией-обработчиком OnBnClickedOk()
Карта сообщений класса CHelloDialogDlg с регистрацией обработчика BEGIN_MESSAGE_MAP(CHelloDialogDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDOK, CHelloDialogDlg::OnBnClickedOk) END_MESSAGE_MAP()
Измените код обработчика OnBnClickedOk() на следующийКод обработчика OnBnClickedOk()
void CHelloDialogDlg::OnBnClickedOk()
{
UpdateData(TRUE);
AfxMessageBox(m_strText);
}
В этом обработчике первой строкой кода мы инициируем выполнение функции DoDataExchange(), осуществляющей копирование значения текстового поля (и всех других текстовых полей ввода, если они есть) в промежуточную переменную m_strText, а во второй строке кода вызываем стандартное диалоговое окно сообщений для показа содержимого этой переменной.
Постройте приложение и испытайте его функциональность на данном этапе
Теперь создадим обработчик сообщения для главного окна приложения, перехватывающего сообщения от самой операционной системы. Пусть, когда пользователь дважды щелкнет по клиентской области родительского окна самого приложения, должно появиться уведомление об этом. Здесь для доступа к таким сообщениям редактор дочерних элементов диалогового окна не поможет.
Откройте панель Class View командой View/Class View
Найдите класс CHelloDialogDlg, отвечающий за главное диалоговое окно, выделите его и раскройте вкладку Properties (Свойства)
На вкладке Properties вверху щелкните по пиктограмме Messages (Сообщения)В окне появятся два столбца с перечнем всех сообщений, для которых можно создать обработчики, и перечень имен всех уже созданных обработчиков.
Найдите и выделите сообщение
Добавьте через раскрывающийся список обработчик этого сообщения
Среда сама создаст функцию-член CHelloDialogDlg::OnLButtonDblClk() со стандартным именем и добавит элемент карты сообщений, переадресующий сообщение WM_LBUTTONDBLCLK на вызов этой функции. Карта сообщений станет выглядеть такКарта сообщений класса CHelloDialogDlg после регистрации обработчика BEGIN_MESSAGE_MAP(CHelloDialogDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDOK, CHelloDialogDlg::OnBnClickedOk) ON_WM_LBUTTONDBLCLK() END_MESSAGE_MAP()
Обратите внимание, что среда не позволяет регистрировать обработчики родительского диалогового окна с произвольными именами, а назначает им стандартное имя. По этой причине в карте сообщений нет необходимости связывать для события конкретные элементы с конкретными обработчиками, как это требуется делать для дочерних элементов.
Объявление функции-обработчика помещается в заголовочный файл диалогового окна и имеет вид
Объявление обработчика в заголовочном файле HelloDialogDlg.h
class CHelloDialogDlg : public CDialog
{
.................................................
public:
// Содержимое текстового поля
CString m_strText;
public:
afx_msg void OnBnClickedOk();
public:
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
};
Заготовка функции-обработчика щелчка по диалоговому окну, которую автоматически добавит среда, имеет вид
Обработчик двойного щелчка на родительском диалоговом окне приложения
void CHelloDialogDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnLButtonDblClk(nFlags, point);
}
Скорректируйте заготовку обработчика события родительского диалогового окна такОбработчик двойного щелчка на родительском диалоговом окне приложения
void CHelloDialogDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CString mess;
mess = "Вы выполнили двойной щелчок \n"
"по клиентской области диалогового окна";
CString title;
title = "Это заголовок окна сообщения";
MessageBox(mess, title, MB_ICONSTOP);
CDialog::OnLButtonDblClk(nFlags, point);
}
Постройте приложение, которое после двойного щелчка по клиентской области будет иметь вид
Итак, для каждого добавленного обработчика сообщений среда генерирует код в трех места:
.h.cpp
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.