Шаг 49.
Среда программирования Visual C++.
Инициализация элементов управления функцией OnInitDialog()

    На этом шаге мы рассмотрим использование функции OnlnitDialog().

    Для инициализации некоторых типов элементов управления недостаточно стандартных или дополнительных DDX-функций MFC. Например, в диалоговом окне Connect to Data Source приложения МуАрр отображаются допустимые источники данных в виде списка, элементы в котором могут со временем меняться. Средства MFC-функций DDX_LBIndex и DDX_LBString позволяют задать начальное выделение элемента в списке и определить выбор пользователя, но в этих функциях не предусмотрена возможность изменения состава списка.

    Для ввода элементов списка обычно перегружают виртуальную функцию базового класса CDialog::OnInitDialog(), выполняемую при инициализации класса диалога. Функция OnInitDialog() вызывает метод CWnd::UpdateData() (а затем и DDX/DDV-функции) и представляет собой наиболее подходящее место для нестандартной инициализаций элементов управления диалогового окна, так как она вызывается после создания окон этих элементов, но до их отображения на экране.

    Практически каждый стандартный элемент управления Window имеет соответствующий MFC-класс. Средства ClassWizard позволяют создать объекты этих классов в качестве членов класса диалога. Meжду этими объектами и элементами управления диалогового окна связь устанавливается посредством функции DDX_Control(), вызываемой в DoDataExchange(). С помощью объектов, представляющих элементами управления, можно инициализировать или обновлять элементы управления диалогового окна.

    Добавим объект MFC-класса CListBox в класс диалога, соответствующий списку Data Source, а затем посредством добавленного члена класса заполним список и установим начальное выделение.

    Обратите внимание на использование новой переменной m_lbDSN при заполнении списка.

    Определить, какой элемент списка выбран пользователем, поможет объект-член CListBox. Функция CListBox::GetCurSel() позволит узнать индекс выбранного элемента (первый элемент списка имеет нулевой индекс). Далее для получения текста, содержащегося в элементе, надо вызвать функцию CListBox::GetText(), которой в качестве параметра передается индекс этого элемента. В следуют примерах Вы получите имя выбранного источника данных и сохраните его в переменной CMyAppApp::m_strDSN. Это имя будет отображаться в строке состояния. Соответствующий код лучше всего поместить в функцию-обработчик кнопки ОК класса диалога, так как пользователь таким образом подтверждает свой выбор. Проверьте наличие обращения к CDialog::OnOK() - именно из этого обработчика по умолчанию вызывается функция CWnd:: UpdateData().

    Посмотрите, правильно ли отображается список в диалоговом окне. Выберите любую строку списка и щелкните ОК. Имя указанного источника данных должно появиться в строке состояния приложения.

    Текст измененного приложения можно взять здесь (50,0 Кб).

    На следующем шаге мы рассмотрим реализацию обработки сообщений от элемента управления.




Предыдущий шаг Содержание Следующий шаг