Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по Леонову, 5семестр.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
503.3 Кб
Скачать

35. Передача информации в диалог и обратно.

Для того чтобы можно было обмениваться данными с диалогом, необходимо прежде всего определить в вашем классе соответ. члены, которые смогут принимать и передавать эти данные.

Начальные значения данных устанавливаются в переопределенной функции OnInitDialog или в конструкторе нашего класса соответ. диалога.

Также необходимо ввести список элементов управления и соответ. им типов переменных:

Текстовое поле (EDIT BOX) CString, int UINT, long, DWORD, float, double, BOOL

Обычный флажок (CHECK BOX) BOOL

Неотсортирированный список (LISTBOX) CString, int

Комбинированный список (COMBOBOX) CString, int

Все остальные виды списков CString

После того как были определены источник и приемник данных, а также их типы, пришло время ознакомится с тем, каким образом осуществляется обмен. Для организации обмена нужны две фун-ции:

BOOL CWnd:: UpdateData (BOOL bSaveAndValidate = TRUE) // - пар. BSaveAndValidate – определяет направленность действий. Если он равен True, то данные введенные пользователем в диалог, записываются в соответствующие переменные класса. Она вызывается в фун-ции CDialog::OnInitDialog с параметром равным FALSE, для инициализации данных при создании модального блока диалога, и в фу-ции CDialog::OnOk с параметром равным TRUE, для получения и проверки на допустимость данных из диалога, если он закрыт при помощи кнопки Ok. Ее основное назначение – инициализация и обработка ошибок при обращении к след. фу-ции: //

virtual void CWnd:: DoDataExchange (CdataExchange *pDX ) // - эта фу-ция, используя параметр pDX (указательна объект класса CdataExchange), и ‘занимается’ обменом данных и проверкой их корректности. Ее необходимо переопределить для каждого класса диалога, который должен обеспечивать взаимодействие с пользователем. //

Общая схема обмена данными:

(рис 35.1)

Объект pDX класса DoDataExchange, имеет флаг направления:

BOOL CdataExchange :: m_bSaveAndValidate // - указ. направ. при операциях обмена данными (DDX). Значение TRUE задает передачу данных от элементов управления диалога к членам соответ. класса, а значение FALSE - в обратном направ. При операциях проверки корректности данных (DDV) всегда установлен в TRUE.

Кроме этого в классе CdataExchange имеются еще члены :

BOOL CdataExchange:: m_pDlgWnd

- // указатель на объект класса CWnd (обычно CDialog), для которого осуществ. обмен и проверка корректности введенных данных;

HWND CddataEXchange:: PrepareCtrl (int nIDC)

- // подготавливает элементы управления к обмену данными. Подготовка заключается в сохранении дескриптора (HWND) элемента управления в классе CddataEXchange.

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

DDX_XXX (pDX, nIDC, member) -// для обмена данными

и

DDV_XXX (pDX, member, …)

// для проверки корректности введенных данных. Пар. XXX – имя соответ. фу-ции (такой как DDX_Check или DDV_MinMaxInt), pDX – указатель на объект CdataExchange, nIDC – индентификатор элемента управления, с которым производится обмен данными, и member – член класса участв. в обмене.