Лекция: Проект Hello(You-Comp).
Создайте проект MFC Applicationв Visual C++ и назовите его Hello.
Запустите Visual Studio 2010. Перейдите в окно шаблонов Visual C++. Выполните команду Создать проектÞПриложение MFC. Укажите имя проекта Hello и разместите проект в своей папке (например, в папке D\_2_g). Щелкните по кнопке Ok.
В окне MFC Application Wizard-Hello (Мастер приложений MFC-Hello) установите следующие параметры:
1. На вкладке Application Type (Тип приложения) — укажите тип приложения Dialog based(На основе диалоговых окон) и Resource language (язык ресурсов) – Русский (Россия).
2. Перейдите на вкладку User Interface (Свойства интерфейса пользователя). Уберите флажок About Box (О программе).
Щелкните по кнопке Finish (Готово). Установите свойство проекта:
1. Выберите в меню Project(Проект)ÞHello Properties (Свойства: Hello…).
2. Раскройте папку Configuration Properties(Свойства конфигурации) и перейдите на узел General(Общие).
3. Щелкните по строке Character Set (Набор символов) укажите Use multi-Byte Character Set (Использовать много байтовую кодировку).
4. Щелкните по кнопке OK.
С помощью вкладки Панель элементов создайте такое окно приложения:
|
|
|
|
|
Данный проект реализуется двумя способами. В каждом варианте реализации проекта используются разные классы библиотеки MFC для одних и тех же элементов управления.
1-ый вариант. Измените имена для окон редактирования пользователя и компьютера на IDC_EDYOU и IDC_EDCOMP соответственно. Для этого выполните команду Свойстваиз контекстного меню для элемента управления окна редактирования. В появившемся окне Свойства измените стандартные свойства, созданные Мастером разработки данного проекта, на следующие:
ИД:IDC_EDYOU, Авто HScroll: False, Многострочный: True.
Аналогично выполняем для окна редактирования компьютера IDC_EDCOMP:
ИД:IDC_EDCOMP, Авто HScroll: False, Многострочный: True.
Свяжите идентификатор окна редактирования IDC_EDYOU с переменной m_You(Доступ: private, Тип переменной: CEdit, Имя переменной: m_You,Категория: Control). Для этого выполняем команду Добавить переменную… из контекстного меню для окна редактирования IDC_EDYOU и в окне Мастер добавления переменной-члена вводим имя переменной и ее свойства. Аналогично, связываем IDC_EDCOMP с переменной m_Comp (Доступ: private, Тип переменной: CEdit, Имя переменной: m_Comp,Категория: Control). Переименуйте стандартные имена для кнопок пользователя и компьютера, как показано на рисунке.
В класс CHelloDlg добавьте описание переменных со статусом protected:
BOOL InviteDone; UINT Count;
Для этого нужно выполнить команду Добавить ÞДобавить переменную… из контекстного меню для класса CHelloDlg.И в окне Мастер добавления переменной-члена вводим имя переменной и ее свойства.
В конструкторе класса CHelloDlg, переменные Count, InviteDone будут инициализацированы:
Count=0; InviteDone = FALSE;
Если переменные были добавлены вручную в класс CHelloDlg, то необходимо тогда инициализировать переменные.
Создайте обработчик сообщения BN_CLICKED для кнопки IDC_YOU. Для этого выполните команду Добавить обработчик событий … для кнопки IDC_YOU.Выберите сообщение BN_CLICKEDи добавьте в класс CHelloDlg обработчик OnBnClickedYou() код. Добавьте данный код в обработчик:
void CHelloDlg::OnBnClickedYou()
{
switch( ++Count )
{
case 1: m_You.SetWindowText(«Привет, компьютер!»); break;
case 2: m_You.SetWindowText(«Компьютер, проснись!»); break;
case 3: m_You.SetWindowText(«Поздоровайтесь, наконец!»); break;
}
}
Аналогично создайте обработчик сообщения BN_CLICKED для кнопки IDC_COMP. Обработчик OnBnClickedComp() будет содержать код:
void CHelloDlg::OnBnClickedComp()
{
CString s1 = «Совет дня: Никогда не разговариваыте с неизвестными! Ваше имя, пожалуйста.», s2= " ";
if ( Count >= 3 )
if ( !InviteDone )
{
m_Comp.SetWindowText(s1);
m_You.SetWindowText(" ");
InviteDone = TRUE;
}
else
{
m_You.GetWindowText(s2);
if( s2 == " " ) s2 = «люди»;
m_Comp.SetWindowText(«Здравствуйте, » + s2 + "! Всегда рад с вами работать!");
m_You.SetWindowText(" ");
}
}
2-ой вариант. В 1-ом варианте для переменных m_You и m_Comp Вы выбирали категорию Control и тип CEdit. В 2-ом варианте выберите категорию Value и тип CString.
Для Ваших переменных появится дополнительная возможность установить максимально допустимое число символов. Задайте, например, 50 для m_You и 80 для m_Comp.
Теперь связанные с окнами переменные m_You и m_Comp стали обычными строковыми переменными. Мастер ClassWizard, понимая это, создаст остов класса с другим механизмом ввода/вывода. Прежде чем его обсуждать, закончим модификацию проекта.
Добавьте дополнительно в определение метода OnInitDialog() инициализацию переменных:
m_Уou = " ";
m_Соmр = " ";
Измените текст функции обработки OnBnClickedYou на:
switch (++Count)
{// Первый щелчок
case 1: m_You = «Привет, компьютер!»; UpdateData( FALSE ); break;
// Второй щелчок
case 2: m_You = «Компьютер, проснись!»; UpdateData(FALSE); break;
// Третий щелчок
case 3: m_You = «Поздоровайся, наконец!”; UpdateData(FALSE); break;
default: UpdateData(TRUE);
}
Текст определения функции OnBnClickedComp заменим на такой:
CString s1 = „Совет дня: Никогда не разговаривайте с неизвестными! Ваше имя, пожалуйста.”, s2;
if (Count >= 3)
if(! InviteDone)
{ m_Comp = s1;
m_You =” ”;
InviteDone = TRUE;
UpdateData(FALSE);
}
else
{ UpdateData(TRUE);
if ( m_You == “ ” ) m_You = “люди”;
m_Comp = “ Здравствуйте, ” + m_You +“! Всегда рад с Вами работать!”;
m_You = “ ”;
UpdateData(FALSE);
}
Как же теперь работает ввод/вывод? Напомним: с помощью окна Add Member Variable Wizard(Мастер добавления переменной-члена) Вы установили соответствие между элементами управления и переменными класса. Таким образом, Вы фиксируете, что между окнами редактирования и переменными установлены связи:
окно IDC_EDYOU Û переменная m_You,
окно IDC_EDCOMP Û переменная m_Comp.
Вызов функции UpdateData включает одновременную передачу данных для всех пар “окно — переменная». Направление передачи задается булевым параметром функции UpdateData. Если задан аргумент FALSE, то это означает передачу из переменной в окно, a TRUE — из окна в переменную.
Заметьте: в момент передачи данные преобразуются в нужный тип автоматически, поскольку известен тип переменной, связанной с окном. Более того, при вводе данных пользователем проверяется их корректность. Строковые данные проверяются на максимально допустимое число символов, целочисленные — на возможный диапазон значений, определяемый при связывании переменной с окном.
Самостоятельно. Продлите диалог следующим образом. На последнее сообщение в окне Компьютера “ Всегда рад с Вами работать!” необходимо продолжить при нажатии клавиши Вы появляется сообщение “Взаимно! “ в окне Пользователя.