Сегодня мы :
Вверх
Разместите на нем все управляющие элементы.
Использование AppWizard для создания оболочки
приложения
Мастер задаст целую серию вопросов о типе создаваемого приложения
и о необходимых функциональных возможностях. Мастер использует эту
инфу для создания оболочки приложения, это приложение уже сразу после
создания этой оболочки можно скомпилировать и запустить. Эта оболочка
является базовой инфраструктурой,
которая необходима для создания приложения.
Выполните следующее:
Таб 3.7 Значения свойств элементов управления нашего диалогового окна приложения.
используя как основу наше только что созданное окно.
Создайте макет окна такой как нарисовано на рисунке 3.3
Static Text (надпись) | Caption | This is example of Visual C++ using a number of controls |
Static Text (надпись) | ID Caption |
IDC_STATICMSG Enter a &Message |
Static Text (надпись) | ID Caption |
IDC_STATICPGM Run a &Program |
Edit Box | ID | IDC_MSG |
Button | ID Caption |
IDC_SHWMSG &Show Message |
Button | ID Caption |
IDC_DFLTMSG &Default Message |
Button | ID Caption |
IDC_CLRMSG &Clear Message |
Button | ID Caption |
IDC_RUNPGM &Run Program |
Button | ID Caption |
IDC_EXIT E&xit |
Combo Box | ID | IDC_PROGTORUN |
Group Box | Caption | Enable Action |
Group Box | Caption | Show Action |
Check Box | ID Caption |
IDC_CKENBLPGM E&nable Program Action |
Check Box | ID Caption |
IDC_CKENBLMSG &Enable Message Action |
Check Box | ID Caption |
IDC_CKSHWMSG S&how Message Action |
Check Box | ID Caption |
IDC_CKSHWPGM Sh&ow Program Action |
(А.В.Идентификатор ID для надписей нужен для того, что с надписями
мы в программе тоже будем производить некоторые действия, например
будем их скрывать или показывать. Для этого будем вызывать функцию,
в которую в качестве параметра будем передавать этот идентификатор)
7.После размещения всех этих элементов управления в диалоговом окне
и конфигурации всех их свойств, снова выберите поле со списком (Combo Box),
а в окне Properties найдите свойство Data и введите следующие значения,
отделяя их точкой с запятой.
Вверх
Создавая код приложения.программист взаимодействует с этими переменными. Значения,которые пользователь вводит в элемент управления диалогового окна, помещается в эти переменные и только затем используется в коде приложения. Аналогично, любое значение, помещаемое кодом приложения в одну из этих переменных, обновляет и соответствующий элемент управления диалогового окна, чтобы пользователь видел изменения.
Таб 3.8 Переменные для элементов управления
Приведенный код инициализации прост.
Затем устанавливаются все флажки в Check Box :
Особо обратите внимание на функцию :
UpdateData()
UpdateData(FALSE);
Эта функция получает доступ к данным, хранящихся в переменных (которые мы только что инициализировали)
и обновляет на экране вид элементов управления так, чтобы отобразить значения
этих переменных.
Она так же принимает данные от элементов управления,
введенные пользователем, и заносит эти данные в переменные. Этот процесс
управляется булевым параметром, передаваемом в качестве аргумента
в функцию UpdateData().
Если значение параметра равно FALSE , то значениями которые хранятся в
переменных, инициализируются элементы управления. Если значение параметра
TRUE или он опущен, то в переменные записываются значения, которые
в данный момент отображаются на экране в соответствующих им элементах
управления.
После того как программа изменила значение одной или более переменных,
Вверх
Вверх
Листинг 3.3 CONTROLSDLG.CPP - отображение пользовательского сообщения.
UpdateData(TRUE)
// Передаем объекту MessageBox переменную m_strMessage,в которой уже
MessageBox(m_strMessage);
Назад |
Вверх |
Вперед
Последовательность перехода по клавише табуляции
Мнемоника - это подчеркнутый символ в надписи на кнопке, флажке, меню
или другая надпись на элементе управления. Пользователь может одновременно
нажать клавишу Alt и соответствующий подчеркнутый символ, чтобы перейти
прямо к нужному элементу управления или инициализировать такое событие как
щелчок на этом элементе управления.
Чтобы определить мнемонику, в свойстве
Caption управляющего элемента поместите амперсанд перед символом,
который вы хотите сделать мнемоникой. (Важно удостовериться что одна и та же
мнемоника не используется более одного раза в одном и том же диалоговом
окне или меню.)
И наконец надо проверить мнемоники, чтобы убедиться в отсутствии конфликтов
между элементами управления. Сделайте следующее:
Можно откомпилировать и сохранить. Проверить как действует клавиша
табуляции. Как выглядит приложение.
Вверх
Связывание переменых и элементов управления
Прежде чем начать программировать, необходимо назначить переменные
каждому элементу управления с которым связывается какое-нибудь значение.
Другими словами - переменные должны быть назначены всем элементам управления, кроме надписей и командных кнопок.
Как же объявить все эти переменные и связать их с элементами управления?
IDC_MSG
m_strMessage
value
CString
public
IDC_PROGTORUN
m_strProgToRun
value
CString
public
IDC_CKENBLPGM
m_bEnablePgm
value
BOOL
public
IDC_CKENBLMSG
m_bEnableMsg
value
BOOL
public
IDC_CKSHWMSG
m_bShowMsg
value
BOOL
public
IDC_CKSHWPGM
m_bShowPgm
value
BOOL
public
Вверх
Добавление функциональных возможностей
для элемента управления
Теперь надо инициализировать переменные, чтобы установить начальные
значения большинства из них.
Для этого выполните пошаговые инструкции:
BOOL CControlsDlg::OnInitDialog()
{
...
SetIcon(m_hIcon,TRUE);//установить большой значек
SetIcon(m_hIcon,FALSE);//установить маленький значек
//поместить заданное по умолчанию сообщение
m_strMessage = "Place a message here ";
//Установить все флажки
m_bShowMsg = TRUE;
m_bShowPgm = TRUE;
m_bEnableMsg = TRUE;
m_bEnablePgm = TRUE;
//обновить значения в диалоговом окне
UpdateData(FALSE);
//возвратить значение ИСТИНА, если элемент управления
не получает фокуса
return TRUE;
В поле правки (Edit Box) устанавливается
начальное сообщение:
//поместить заданное по умолчанию сообщение
m_strMessage = "Place a message here ";
//Установить все флажки
m_bShowMsg = TRUE;
m_bShowPgm = TRUE;
m_bEnableMsg = TRUE;
m_bEnableMsg = TRUE;
//обновить значения в диалоговом окне
Эта функция представляет собой
ключ для работы с переменными элементов управления.
Таким образом параметр функции определяет направление передачи значений
от переменных к элементам управления или в противоположном направлении.
Или другими словами этот параметр определяет что будет модифицироваться
-переменные или элементы управления.
следует вызвать функцию UpdateData(), передав ей в качестве параметра
FALSE.
Чтобы прочитать значения переменных, введенных пользователем
интерактивно, необходимо сначала вызвать функцию UpdateData()
передав ей в качестве параметра TRUE, а затем можно читать значения
любой из этих переменных.
Закрытие приложения
void CControlsDlg::OnBnClickedExit()
{
Здесь используется функция базового класса OnOK() .
Отображение пользовательского сообщения
Отобразить сообщение которое пользователь ввел в окне Edit Box
не сложно.Можно воспользоваться для этого командной кнопкой,которая у нас
на форме и на которой написано Show Message.Для этого выделяем эту
кнопку в редакторе и связываем ее событие BnClicked с функцией
которая будет вызываться при нажатии на эту кнопку.Название этой
функции нам подсказывает мастер создания приложений,если нажать правой
кнопкой на событии BnClicked.Выбрав эту функцию мы попадаем в код
CONTROLSDLG.CPP где внутри этого кода пишем вызов функции MessageBox :
void CControlDlg::OnBnClickedShow()
{
Если сейчас скомпилировать и запустить приложение,то мы увидим на
экране не то сообщение,которое ввел пользователь,а то которым
была инициализирована эта переменная в функции OnInitDialog().
Это произошло потому,что в переменную не было записано значение
которое ввел пользователь в элемент Edit Box.Чтобы значение ,которое
пользователь ввел в элемент Edit Box ,записалось в переменную
m_strMessage надо применить функцию UpdateData(TRUE) с аргументом TRUE.
Вот измененный код :
Листинг 3.4 CONTROLSDLG.CPP - отображение пользовательского сообщения.
void CControlDlg::OnBnClickedShow()
{
Если теперь скомпилировать и запустить приложение, то оно отобразит
в окне сообщения текст, который пользователь ввел в Edit Box -окне
редактирования.
MessageBox(m_strMessage);
Еще раз вот как это работает:
void CControlDlg::OnBnClickedShow()
{
// m_strMessage а так же инициализируем и другие переменные ассоциированные
// с другими элементами на экране
// содержатся данные,которые ввел пользователь.Переменная инициализирована
// данными которые ввел пользователь
Содержание