Шаг 51.
Среда программирования Visual C++.
Активизация и блокировка элементов управления
На этом шаге мы рассмотрим механизмы активизации и блокировки элементов управления.
Если функции команд меню или панелей инструментов невыполнимы, то следует сделать недоступными и
сами команды. То же относится и к элементам управления диалогового окна.
Сейчас с помощью диалогового окна Connect to Data Source пользователь может попытаться соединиться с
источником данных независимо от того, выбран ли какой-нибудь источник и введено ли имя пользователя. Контроль
за этой ситуацией осуществляют посредством функции проверки. Однако лучше заблокировать кнопку Connect,
пока не введена необходимая информация. В следующем примере мы увидим, как средствами функции
CWnd::EnableWindow() активизировать и заблокировать элемент управления, а также как с помощью
функции-обработчика уведомляющих сообщений обновить состояние элемента управления, когда данные диалогового
окна изменяются пользователем.
- Активизация и блокировка кнопки Connect.
- На вкладке Member Variables ClassWizard щёлкните идентификатор IDОК для класса
CConnectDialog. Добавьте переменную-член класса m_bnConnect типа CButton.
- На вкладке Member Variables ClassWizard щелкните идентификатор IDC_USERID для класса
CConnectDialog. Добавьте переменную-член класса m_editUserID типа CEdit. Щелкните ОК,
чтобы закрыть ClassWizard.
Рис.1. Добавленные переменные
- В конец функции CConnectDialog::OnSelchangeDsnlist() непосредственно перед закрывающей скобкой
вставьте код, который активизирует кнопку Connect, если выбран источник данных и введено имя пользователя:
char tempbuf[8];
if (m_editUserID.GetWindowText(tempbuf, 7))
m_bnConnect.EnableWindow(TRUE);
Рис.2. Функция CConnectDialog::OnSelchangeDsnlist()
- На вкладке Message Maps ClassWizard щелкните идентификатор IDC_USERID для класса
CConnectDialog. Выберите сообщение и добавьте функцию обработки уведомляющих сообщений
OnUpdateUserid().
Рис.3. Задание функции OnUpdateUserid()
Щелкните Edit Code, чтобы отредактировать функцию.
- Добавьте следующие строки в функцию OnUpdateUserid():
char tempbuf[8];
if ( (m_lbDSN.GetCurSel() != LB_ERR) &&
(m_editUserID.GetWindowText(tempbuf, 7)) )
m_bnConnect.EnableWindow(TRUE);
else
m_bnConnect.EnableWindow(FALSE);
- В конец функции CConnectDialog::OnInitDialog() непосредственно перед оператором возврата вставьте
следующую строку, обеспечивающую правильное отображение кнопки Connect при первом появлении
диалогового окна:
- Поскольку функция проверки DDV_Required() для этого поля уже не нужна, удалите саму функцию из
файла ConnectDialog.cpp, ее объявление из файла ConnectDialog.h, а также обращение к ней в функции
CConnectDialog::DoDataExchange() из файла ConnectDialog.cpp. Верните следующие строки в тело блока
//{{AFX_ DATA_MАР для дальнейшего обслуживание их средствами ClassWizard (проследите, чтобы эти строки шли вместе):
DDX_Text(pDX, IDC_USERID, m_strUserID);
DDV_MaxChars(pDX, m_strUserID, 15);
- Соберите и запустите приложение МуАрр. Убедитесь, что кнопка Connect диалогового окна
Connect to Data Source становится активной только тогда, когда выбран источник данных и заполнено поле UserID.
Текст измененного приложения можно взять здесь (51,8 Кб).
На следующем шаге мы рассмотрим редактирование данных средствами диалогового окна.
Предыдущий шаг
Содержание
Следующий шаг