Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
В-ДПОВ-Д- НА КОНТРОЛЬН- ПИТАННЯ ДО КОНТРОЛЬНОп...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
250.88 Кб
Скачать
  1. Метод oninitdialog

При отображении диалоговой панели при помощи функций DoModal, Create или CreateIndirect, функция диалоговой панели передается сообщение WM_INITDIALOG. Непосредственного доступа к функции диалога нет. Ее реализация содержится в классе CDialog.

В ответ на сообщение WM_INITDIALOG вызывается метод OnInitDialog, объявленный как виртуальный метод класса CDialog. Этот метод вызывается непосредственно перед выводом панели на экран.

MFC AppWizard в реализацию этого метода добавил несколько действий: добавление строки к системному меню для вызова краткой справки о приложении, а также при помощи метода SetIcon выбрал пиктограмму для приложения.

Метод OnInitDialog возвращает значение TRUE. Это означает, что фокус ввода будет установлен на первый орган управления диалоговой панели. Первый орган диалоговой панели можно выбрать в редакторе диалоговой панели.

Если во время инициализации диалоговой панели метод OnInitDialog устанавливает фокус ввода другому органу управления, метод должен вернуть значение FALSE.

  1. Класс диалоговой панели и его реализация

  1. Обмен данными диалога

Переопределение функций базового класса.

Если один класс С++ происходит от другого, то он автоматически наследует открытые (public) и защищённые (protected) члены базового класса (как переменные, так и функции).

Для переопределения функций базового класса в классе-потомке тоже используется диалоговое окно Properties.

Например, класс CDialog обладает виртуальной функцией DestroyWindow, вызов которой осуществляется в том случае, если диалоговое окно получает сообщение WM_DESTROY. Следовательно, эту функцию приходится переопределять достаточно часто, всякий раз. Когда необходимо реализовать свой собственный метод завершения работы, закрывающий, например, соединение с базой данных или освобождающий выделенную динамическую память.

Переопределяемые функции можно посмотреть в окне Properties, нажав на пиктограмму Overrides.Для переопределения выбираем в списке нужную функцию и пункт Add.

Обмен данными между диалогом (формой) и программой.

Специальный механизм динамического обмена данными (DDX) позволяет передавать данные между элементами управления диалогового окна и переменными-членами приложения.

Для этого в программе должна быть описана специальная переменная, связывающая элемент управления с программой.

Переменные бывают двух типов:

DDX Control Variable – (управляющая переменная) – связывает элемент управления диалогового окна с переменной, являющейся экземпляром класса-оболочки данного элемента в библиотеке MFC, например, класс CEdit.

Наличие переменной-члена класса CEdit, привязанной к полю ввода Edit, позволяет манипулировать этим полем с помощью функций-членов класса CEdit, избегая при этом необходимости использовать более трудоёмкий способ создания системных сообщений.

Обычно этот тип переменной используется в том случае, если необходимо каким-то образом манипулировать самим элементом управления на форме диалога, например, перемещать его или изменять его размер.

DDX Value Variable(переменная значение) – связывает элемент управления диалогового окна с переменной MFC, содержащей значение этого элемента управления. Например, это может быть тип CInt – для целых чисел, или тип CString – для строки.

Для создания переменной вызываем контекстное меню на элементе управления и выбираем пункт Add Variable. Запускается «Мастер добавления переменной-члена» (Add Member Variable Wizard).

В поле Variable Name следует ввести имя для переменной. В поле Category указать тип переменной Control (управляющая) или Value (значение). В поле Variable type следует выбрать подходящий тип.

Передача данных.

Для организации обмена данными применяют функцию UpdateData класса CDialog Dialog::UpdateData().

Если эту функцию вызвать с параметром TRUE, то данные из элемента управления диалогового окна будут передаваться в переменную-член.

Если же необходимо передать данные из переменной-члена в элемент управления диалогового окна, то функцию следует вызывать с параметром FALSE.

Значение по умолчанию – TRUE.