Некоторые клиенты предпочитают чтобы окно редактирования было очищено
перед вводом в него сообщения. Для удобства таких пользователей можно
к кнопке на которой написано Clear Message присоединить функцию,
предназначенную для очистки Edit Box. Фактически мы просто присваиваем
переменной m_strMessage пустую строку, и затем обновляем элементы
управления в окне, чтобы в них отразилось это изменение.
Посмотрите листинг 3.5
Листинг 3.5 CONTROLSDLG.CPP - отображение пользовательского сообщения.
void CControlsDlg::OnBnClickedClrmsg()
{
//обновить значения в диалоговом окне
UpdateData(FALSE);
Вверх
Добавим функции к флажкам (то есть к объектам Check Box):
Затем проверяется значение булевой переменной, связанной с соответствующим
флажком.Если значение переменной равно TRUE, то включается или
отображается нужный элемент управления. Если значение переменной равно FALSE,
то элемент управления отключается или прячется.
А вот в дальнейшем коде разобраться труднее.
Первой функции GetDlgItem() передается идентификатор (ID) того элемента управления, который нужно изменить.
Вторая функция представляет собой функцию-член объекта элемента управления, указатель на который был возвращен первой функцией.
Вторые функции в этих вызовах, EnableWindow() и ShowWindow()
выглядят так, как будто они должны использоваться для манипуляций
с окнами а не с элементами управления. И действительно они должны
использоваться для манипуляций с окнами, ведь они члены класса CWnd,
представляющего собой базовый класс для класса CDialog, производным
от которого является наш класс CControlsDlg.
Так случилось что в Widows
все элементы управления сами являются окнами, полностью отдельными
от окна в котором они размещены. Это позволяет рассматривать элементы
управления как окна и вызывать функции окон для работы с ними.
Фактически ведь все классы элементов управления являются производными
от класса CWnd. Это проясняет истинную природу элементов управления:
все они представляют собой окна.
Назад |
Вверх |
Вперед
Отключение и сокрытие элементов управления сообщениями
Enable Message Action (разрешить сообщение) и
Show Message Action (Отображать элементы управления сообщениями)
Первый из этих флажков включает и отключает элементы управления, имеющие
отношние к отображению пользовательского сообщения. Когда флажок установлен,
элемент управления становится доступным для пользователя. В противном случае
элементы блокируются.
Второй флажок делает видимым или не видимым тот же самый набор элементов.
В листинге 3.6 представлен код этих двух функций.
Листинг 3.6
void CControlsDlg::OnBnClickedCkenblmsg()
{
if(m_bEnableMsg == TRUE)
{
GetDlgItem(IDC_SHWMSG)->EnableWindow(TRUE);
GetDlgItem(IDC_DFLTMSG)->EnableWindow(TRUE);
GetDlgItem(IDC_CLRMSG)->EnableWindow(TRUE);
GetDlgItem(IDC_STATICMSG)->EnableWindow(TRUE);
else
{
GetDlgItem(IDC_SHWMSG)->EnableWindow(FALSE);
GetDlgItem(IDC_DFLTMSG)->EnableWindow(FALSE);
GetDlgItem(IDC_CLRMSG)->EnableWindow(FALSE);
GetDlgItem(IDC_STATICMSG)->EnableWindow(FALSE);
}
void CControlsDlg::OnBnClickedCkshwmsg()
{
if(m_bShowMsg == TRUE)
{
GetDlgItem(IDC_SHWMSG)->ShowWindow(TRUE);
GetDlgItem(IDC_DFLTMSG)->ShowWindow(TRUE);
GetDlgItem(IDC_CLRMSG)->ShowWindow(TRUE);
GetDlgItem(IDC_STATICMSG)->ShowWindow(TRUE);
else
{
GetDlgItem(IDC_SHWMSG)->ShowWindow(FALSE);
GetDlgItem(IDC_DFLTMSG)->ShowWindow(FALSE);
GetDlgItem(IDC_CLRMSG)->ShowWindow(FALSE);
GetDlgItem(IDC_STATICMSG)->ShowWindow(FALSE);
}
Вам должна быть понятна первая часть этих функций. Сначала обновляются
переменные (при помощи функции UpdateData(TRUE) ) - в них записываются
текущие значения, хранящиеся в элементах управления диалогового окна.
То есть считываются данные с экрана : стоит птичка в элементе Check Box
или нет.
Эта функция возвращает указатель на элемент управления. Во время выполнения
приложения она позволяет получить указатель на любой элемент управления
диалогового окна. В следующей части каждого оператора записан вызов функции-
члена объекта элемента управления.
Откомпилируйте и испытайте теперь приложение.
Содержание