Программирование | Отладка | Web-технологии | Microsoft Office | Теор.информатика | Исслед-е операций | Операц. сис-мы | Новости |
Проектирование ИС | Исск. инт-т | Трансляторы | Об авторах | Карта сайта | Поиск |
Язык программирования Turbo Pascal |
Среда программирования Delphi 6 |
Язык программирования C++ |
Язык программирования C# |
Язык программирования Assembler |
Язык программирования Go |
Язык программирования Haskell |
Язык программирования Java |
Язык программирования Kotlin |
Язык программирования LISP |
Язык программирования Prolog |
Язык программирования Python |
Параллельные алгоритмы |
Сети Петри |
Начала |
Отладчик Turbo Debugger |
Основы HTML |
Технология Flash |
Язык программирования Perl |
Основы языка PHP |
Основы PhotoShop |
Основы JavaScript |
Основы CSS |
Основы CorelDRAW |
Библиотека jQuery |
Текстовый процессор Microsoft Word |
Электронные таблицы Microsoft Excel |
Система управления базами данных Microsoft Access |
Использование VBA в Microsoft Excel |
Место информатики в системе наук |
Общие сведения об информации |
Кодирование информации в теории Шеннона |
Основные понятия теории алгоритмов |
Классические формализации понятия 'алгоритм' |
Понятие рекурсии |
Сложность алгоритма |
Методы разработки алгоритмов |
Сложность задачи |
Информационное моделирование |
Основные понятия теории графов |
Алгоритмы поиска на графах |
Матроиды. 'Жадные' алгоритмы |
Динамическое программирование |
Алгоритмы |
UNIX и Linux |
Унифицированный язык моделирования UML |
Введение в машинное обучение с использованием Python |
Основы создания нейросети на Python |
Глубокое обучение на Python |
Начала |
Динамические структуры данных |
Библиотека RX |
Основные классы и события Delphi |
Основные компоненты Delphi |
Организация потоков |
Технология COM |
Язык программирования Object Pascal |
Локальные БД в Delphi |
Библиотека OWL |
Библиотека Qt |
Библиотека STL |
Библиотека шаблонов классов Borland |
Основы компьютерной графики |
Динамические структуры данных |
Начала |
Обработка исключительных ситуаций |
Оптимизация с помощью ассемблера |
Основы объектно-ориентированного программирования |
Потоки ввода-вывода |
Разное |
Редактор Resource Workshop |
Среда Visual C++ |
Программирование в Microsoft Visual C++ 2010 |
Технология CUDA |
Технология OLE |
Начала |
16-битное программирование |
32-битное программирование |
Основы логического программирования |
Динамические структуры данных |
Visual Prolog |
Библиотека PyQt5 |
Библиотека Tkinter |
Визуализация данных |
Начала |
Задачи ComputerScience |
Рекурсия |
Вкладка RXControls |
Вкладка RXDBAware |
Вкладка RXTools |
Вкладка Standard |
Вкладка Additional |
Создание Internet-приложений |
Вкладка System |
Вкладка Win32 |
Вкладка Servers |
Технология ADO |
Вкладка QReport |
Вкладка InterBase |
Вкладка Dialogs |
Начала |
Среда программирования. Язык С/С++ |
На этом шаге мы рассмотрим реализацию механизма обмена и проверки данных средствами ClassWizard.
Чтобы увидеть код, добавленный ClassWizard для реализации механизма DDX/DDV, откройте файл ConnectDialog.h и найдите описание новых переменных класса:
//{{AFX_DATA(CConnectDialog) enum { IDD = IDD_CONNECTDIALOG }; CString m_strUserID; CString m_strPassword; int m_nAccess; BOOL m_bConnect; //}}AFX_DATA
Как и весь код, обслуживаемый ClassWizard, эти объявления находятся внутри блока //{{AFX_.
Найдите в файле ConnectDialog.cpp конструктор класса и код, добавленный ClassWizard для инициализации переменных по умолчанию:
//{{AFX_DATA_INIT(CConnectDialog) m_strUserID = _T(""); m_strPassword = _T(""); m_nAccess = 0; m_bConnect = FALSE; //}}AFX_DATA_INIT
Обмен данными между элементами управления и приложением осуществляет функция CWnd::DoDataExchange(). Переопределяемая версия этой функции автоматически формируется средствами ClassWizard при создании класса, производного от CDialog. ClassWizard добавляет в нее обращения к DDX/DDV-функциям.
Функция CConnectDialog::DoDataExchange() расположена в файле ConnectDialog.cpp и на данном этапе должна выглядеть следующим образом:
void CConnectDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CConnectDialog) DDX_Text(pDX, IDC_USERID, m_strUserID); DDV_MaxChars(pDX, m_strUserID, 15); DDX_Text(pDX, IDC_PASSWORD, m_strPassword); DDV_MaxChars(pDX, m_strPassword, 15); DDX_Text(pDX, IDC_ACCESS, m_nAccess); DDV_MinMaxInt(pDX, m_nAccess, 1, 5); DDX_Check(pDX, IDC_CHECKCONTROL, m_bConnect); //}}AFX_DATA_MAP }
Параметр pDX, передаваемый DDX/DDV-функциям, представляет собой объект MFC-класса CDataExchange, инкапсулирующий контекст текущего обмена данными. Переменная m_bSaveAndValidate класса CDataExchange задает направление передачи данных. Если ее значение TRUE, то данные извлекаются из элемента управления для проверки и сохранения в переменной класса диалога. В противном случае (FALSE) данные передаются в обратном направлении - в диалоговое окно для изменения элемента управления.
На следующем шаге мы рассмотрим процесс обмена данными и проверки данных диалога.