|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Обмен данными между окном диалога и приложением
Такой обмен реализуется с помощью функций с префиксом DDX (dialog date exchange). Он возможен, поскольку объекты класса диалог создаются раньше реального появления окна на экране и остаются в памяти после закрытия окна. При вызове метода UpdateData(TRUE) (обмен элемент->приложение, FALSE в обратном направлении) им вызывается метод DoDataExchange(). Методом UpdаtеData() используются стандартные методы CDialog::OnInitDialog() и CDialog::OnOk() Для формы:
Мастером классов будет автоматически сгенерирован примерно такой текст: void CMyDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyDialog). DDX_Text(pDX, IDC_EDIT1, m_ed1); DDV_MaxChars(pDX, m_ed1, 10); DDX_Text(pDX, IDC_EDIT2, m_ed2i); DDV_MinMaxInt(pDX, m_ed2i, 0, 100); //}}AFX_DATA_MAP } Функции DDX_... осуществляет обмен данными, методы DDV (dialog data violation) осуществляют проверку достоверности данных прежде чем записать их в поле класса диалога. DDV функции вызываются сразу после соответствующих DDX функций. При необходимости можно использовать собственные DDV функции. Однако стоит располагать их вне блока AFX_DATA_MAP, иначе мастер классов не сможет продолжить сою работу. При необходимости можно так же определить и свою DDX функцию, которая так же, как и стандартные должна иметь 3 параметра: 1. Указатель на объект CDataExchange 2. Идентификатор ресурса элемента управления 3. Ссылку на переменную для обмена Заголовок может иметь приблизительно такой вид: void AFXAPI DDX_MyF(CDataExchange* pDX, Int nIDC, int& m_value) { …} В классе CDataExchange объявлена переменная флаг m_bSaveAndValidate, принимающая значение TRUE если обмен идет из элемента управления в переменные класса и FALSE при обратном направлении. Переменная m_pDlg_Wnd представляет собой указатель на окно диалога, с которым производится обмен. Кроме переменных в этом классе определены и методы PrepareCtrl() и PrepareEditCtrl(), обеспечивающие подготовку элементов управления диалога к обмену. Метод Fail() можно использовать для предотвращения исключительно в случае ошибки при обмене или недостоверности данных Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |