Контакты

Для связи с нами можно использовать:
irc://irc.chatnet.ru:#gfs
icq://546460
email://cobalt[@]gfs-team.ru

Все материалы предоставлены только с ознакомительной целью
ГлавнаяСтатьиКодингMFC - урок третий.
© s0 20.03.2007

Заставляем контролы работать на нас

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

Часть 1 – Создаем Проэкт.

Открываем MSVS, Идем в File->New, в открывшемся окне выбираем MFC AppWizard(EXE), Project Name step3 и жмем ОК.

В следующем окне выбираем Dialog based и жмем Next

Далее.. Убираем галочку с About box

На 3-м шаге ничего не трогаем, и просто жмем Next
На 4-м шаге выбираем CStep3Dlg

Все, Wizard сгенерировал для нас готовый проэкт. Теперь если нажать F5, то у нас отроется диалоговое окно с кнопками ОК и Cancel.

Часть 2 – добавляем элементы управления

Открываем вкладку ResourceView

И открываем деревья step3 resources и Dialog, и два раза жмем на IDD_STEP3_DIALOG

Перед нами откроется диалоговое окно. Сейчас мы будем над ним издеватся.. Для начала удалим все контролы(две кнопки и текст). Затем из маленькой панельки

Добавим две кнопки и две edit box(поле для воода) и расположим их примерно так.

Теперь щелкнем на кнопке Button1 правой кнопкой мыши, и в раскрывшемся меню выберем Properties Откроется окно которое позволяет редактировать свойства нашей кнопки. Поле ID задает идентификатор нашей кнопки в файлах ресурсов. Именно с помощью этого идентификатора мы в дальнейшем будем работать с нашей кнопкой. Поле Caption задает надпись на кнопке.

Теперь измените поле ID и Caption на IDC_COPY и Copy.

И нажмите энтер. Для кнопки Button2 проделайте теже действия, только замените на IDC_HS и Hide Для edit box’ов ничего не трогайте.

Часть 3 – Пишем код

Наша программа будет делать следующие:

1) При нажатии на кнопку Copy – текст из верхнего Edit Box’a будет копироватся в нижний
2) При нажатии на кнопку Hide – оба Edit Box’a будут исчезать, а надпись на кнопке Hide будет менятся на Show, и наооборот соответсвенно.

Для начала мы привяжем нажи Edit Box’ы к переменным. Это делается для облегчения работы с ними. Идем в меню View и выбираем ClassWizard(CTRL+W) В открывшемся окне ClassWizard выбираем вкладку Member Variables. Выделяем IDC_EDIT1 и нажимаем на кнопку Add Variable

В поле Member variable name пишем m_Edit1 В поле Category выбираем Control В поле Variable Type выбираем CEdit и жмем ок. Для IDC_EDIT2 проделываем теже шаги, только в поле Member variable name пишем m_Edit2 И закрываем Class Wizard нажатием кнопки ОК. Теперь приступим к написанию кода. Щелкаем два раза на кнопке Copy, откроется маленькое окошко в котором жмем ОК. Перед нами открылся код который будет вызыватся при нажатии на кнопку Copy.

<span style="font-size: 8pt;" lang="EN-US">
void CStep3Dlg::OnCopy()
{
  // TODO: Add your control notification handler code here
}
</span>

На данный момент он пуст, но сейчас мы будем его заполнять. Сразу после строчки // TODO: Add your control notification handler code here пишем

<span style="font-size: 8pt;" lang="EN-US">
void CStep3Dlg::OnCopy()
{
   // TODO: Add your control notification handler code here
  CString edit1;
  m_Edit1.GetWindowText(edit1);
  if(edit1.IsEmpty())
  {
    AfxMessageBox("Please Enter something");
    return;
  }
  m_Edit2.SetWindowText(edit1);
}
</span>

Теперь пояснения к коду CString edit1; Обьявляем переменную типа CString в которой будет хранится текст из верхнего поля ввода.

m_Edit1.GetWindowText(edit1); m_Edit1 это идентификатор нашего поля ввода. С помощью функции GetWindownText мы получаем текст который ввели в это поле ввода.

<span style="font-size: 8pt;" lang="EN-US">
if(edit1.IsEmpty())
{
   AfxMessageBox("Please Enter something");
   return;
}
</span>

Тут мы проверяем переменную edit1, и если она пуста, то выдаем сообщение с прозьбой ввести что-нибудь в верхние поле ввода.

m_Edit2.SetWindowText(edit1); m_Edit2 идентификатор второго поля ввода. И с помощью функции SetWindowText мы добавляем в него текст из переменной edit1.

Теперь можно запустить программу(F5) и проверь все ли работает. Если что-то не работает, вернитесь назад и проверьте все еще раз.

Теперь снова откроем Class Wizard(CTRL+W) и на вкладке Member Variables для IDC_HS добавим Add Variable. Member variable name напишем m_HS и нажмем ОК.

После этого открываем вкладку ClassView, щелкаем правой кнопкой на строчке CStep3Dlg и в раскрывшемся меню выбираем Add Member Variable.

В открывшемся окне: Variable type – bool
Variable name – hs
Access public
И жмем ОК.

Мы добавили в программу глобальную переменную. С помощью которой мы будем определять скрыть или показать Edit Box’ы.

Теперь на вкладке FilesView откроем файл step3Dlg.cpp И после строчки

<span style="font-size: 8pt;" lang="EN-US">
SetIcon(m_hIcon, FALSE);                    // Set small icon
// TODO: Add extra initialization here
</span>

Пишем hs = false; Тем самым при запуске приложения hs будет равно false

Сново откроем наше диалоговое окно, и два раза щелкнем на кнопке Hide. И пишем следующий код

<span style="font-size: 8pt;" lang="EN-US">
void CStep3Dlg::OnHs()
{
    // TODO: Add your control notification handler code here
   if(hs)
   {
      m_HS.SetWindowText("Hide");
      m_Edit1.ShowWindow(SW_SHOW);
      m_Edit2.ShowWindow(SW_SHOW);
      hs = false;
   }
   else
   {
      m_HS.SetWindowText("Show");
      m_Edit1.ShowWindow(SW_HIDE);
      m_Edit2.ShowWindow(SW_HIDE);
      hs = true;
   }
}
</span>

Тут пояснять в принципе нечего, все и так понятно. Функция ShowWindow показывает или скрывает окно(а кнопка это окно).

SW_SHOW и SW_HIDE это константы-сообщения которые говорят функции ShowWindow что надо делать.

Подробние про ShowWindow можно почитать тут

Ну вот на сегодня и все...




© s0 20.03.2007

e-Commerce Partners Network
liosha написал:

Огромное спасибо!!! Больше часа искал подобную статью.

Ник:

Текст:
P Br B I Qute



Код: обновить
Последние комментарии
17.08.2017 17:38:27 DanielBIOLA написал:
Ламинин Lamnine LPGN в Україні, в Украине, Украина Ckaйп evg7773 15-23-28...
Взлом домофонов
17.08.2017 00:22:06 Avia777dymn написал:
<b>Авиабилеты по РУ за 60 процентов от цены кассы.</b> по МИРУ...
Сайт снова работает!
16.08.2017 11:13:50 Avia777dymn написал:
<b>Авиабилеты по РУ за 60 процентов от цены кассы.</b> по МИРУ...
Предупреждение
Реклама

Тут должна была быть ваша реклама, но мы потеряли глиняную табличку с ее текстом. SapeId: 665044

Rambler's Top100