Заставляем контролы работать на нас
В этом уроке мы научимся: создавать диалоговое окно с помощью 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

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