Элементы управления ActiveX в MFC. Использование привязки данных в элементе управления ActiveX
Один из элементов управления ActiveX мощного используется привязка данных, что позволяет свойства элемента управления в привязке с конкретным полем в базе данных. Когда пользователь изменяет данные в этом свойстве, ограниченном уведомляет элемент управления базу данных и эти запросы были обновлены record поле. База данных затем уведомляет элемент управления успеха или неудачи запроса.
Этот раздел охватывает сторону элемента управления данной задачи. Реализация взаимодействия привязки данных с базой данных за контейнера элементов управления. Как управлять взаимодействия базы данных в контейнере выходящей за область данной документации. Как при подготовке элемент управления для привязки данных элементы в остальной части этой статьи.
Концептуальную схема элемента управления с привязкой к данным
Класс COleControl предоставляет 2 функции-члена, выполняют привязку данных простой процесс для реализации. Первая функция, BoundPropertyRequestEdit используется в запрос разрешения на изменение значения свойства. BoundPropertyChanged, вторая функция, вызывается после того, как успешно значение свойства было изменено.
Этот раздел охватывает следующее:
Создание элемента стандартное свойство
Создание элемента получает и задать метод
Создание элемента стандартное свойство
Можно создать данным привязанное стандартное свойство, хотя более вероятно, что необходимо связывания get/set метод.
Примечание
Стандартные свойства имеют атрибуты Разрешена привязка и Затребовано по умолчанию.
Добавление элемента стандартное свойство с помощью мастера добавления свойства.
Начните проект с помощью Мастер элементов ActiveX MFC.
Щелкните правой кнопкой мыши узел интерфейса для элемента управления.
Это открывается контекстное меню.
В контекстном меню щелкните Добавить, а затем щелкните Добавить свойство.
Выделите одну из записей из раскрывающегося списка Свойство Имя. Например, можно выберите Текст.
Поскольку стандартное свойство атрибуты Текст, Разрешена привязка и Затребовано уже проверены.
Выделите следующие флажки на вкладке Атрибуты IDL. Отобразить привязку и Привязка по умолчанию, чтобы добавить атрибуты к определению свойства в файле проекта .IDL. Эти атрибуты обеспечивают элемент управления видимым для пользователя и делают стандартным свойством по умолчанию элемента свойства.
На этом этапе, элемент управления может отображать данные из источника данных, но пользователь не сможет полей обновления данных. Если требуется, чтобы элемент управления также возможности обновления данных, измените функцию OnOcmCommand OnOcmCommand, чтобы выглядеть следующим образом:
#ifdef _WIN32
WORD wNotifyCode = HIWORD(wParam);
#else
WORD wNotifyCode = HIWORD(lParam);
#endif
if(wNotifyCode==EN_CHANGE)
{
if(!BoundPropertyRequestEdit(DISPID_TEXT))
{
SetNotSupported();
}
else
{
GetText();
// Notify container of change
BoundPropertyChanged(DISPID_TEXT);
}
}
return 0;
Теперь можно выполнить построение проекта, который регистрируется элемент управления. При вводе элемент управления в диалоговое окно, свойства Поле данных и Источник данных будут добавлены и теперь choice источника данных и поля для отображения в элементе управления.
Создание элемента получает и задать метод
В дополнение к данным привязанное get/set метод, можно также создать стандартное свойство элемента.
Примечание
В этой процедуре предполагается, что имеется проекта элемента управления ActiveX, который наследуется от класса элемента управления Windows.
Добавляет задает, что и задать метод связывания с помощью мастера добавления свойства.
Загрузите проект элемента управления.
На странице Параметры элементов управления выберите класс окна элемента управления к вложенному классу. Например, может потребоваться к вложенному классу элемента управления "Поле ввода".
Загрузите проект элемента управления.
Щелкните правой кнопкой мыши узел интерфейса для элемента управления.
Это открывается контекстное меню.
В контекстном меню щелкните Добавить, а затем щелкните Добавить свойство.
Введите его имя в поле Имя свойства. Используйте MyProp для данного образца.
Выберите тип данных из раскрывающегося списка свойство Type. Используйте short для данного образца.
В поле Тип реализации, щелкните Get/set методы.
Выделите следующие флажки на вкладке IDL атрибутов: Разрешена привязка, Затребовано, Отобразить привязку и Привязка по умолчанию, чтобы добавить атрибуты к определению свойства в файле проекта .IDL. Эти атрибуты обеспечивают элемент управления видимым для пользователя и делают стандартным свойством по умолчанию элемента свойства.
Нажмите кнопку Готово.
Измените тело функции SetMyProp так, чтобы она будет содержать следующий код:
if(!BoundPropertyRequestEdit(1)) { SetNotSupported(); return; } else { if(AmbientUserMode()) // SendMessage only at run-time { _stprintf_s(m_strText.GetBuffer(10), 10, _T("%d"), newVal); SetWindowText(m_strText); m_strText.ReleaseBuffer(); } else { InvalidateControl(); } // Signal a property change // This is the MFC equivalent of OnChanged() BoundPropertyChanged(1); SetModifiedFlag(); }
Параметр, переданный функции BoundPropertyChanged и BoundPropertyRequestEdit dispid свойства, переданный параметр атрибуту ID () для свойства в файле .IDL.
Измените функцию OnOcmCommand, чтобы она содержит следующий код:
#ifdef _WIN32 WORD wNotifyCode = HIWORD(wParam); #else WORD wNotifyCode = HIWORD(lParam); #endif if(wNotifyCode==EN_CHANGE) { if(!BoundPropertyRequestEdit(DISPID_TEXT)) { SetNotSupported(); } else { GetText(); // Notify container of change BoundPropertyChanged(DISPID_TEXT); } } return 0;
Измените функцию OnDraw так, чтобы она будет содержать следующий код:
if(!AmbientUserMode()) { // Draw the Text property at design-time pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH))); pdc->DrawText(m_strText, -1, (LPRECT)&rcBounds, DT_LEFT | DT_TOP | DT_SINGLELINE); } else { DoSuperclassPaint(pdc, rcBounds); }
Общедоступного раздел файла заголовка файла заголовка для класса элемента управления добавьте следующие определения (конструкторы) для переменных-членов:
CString m_strText; short m_nMyNum;
Сделайте следующей последней линией линии в функции DoPropExchange:
PX_String(pPX, _T("MyProp"), m_strText);
Измените функцию OnResetState так, чтобы она будет содержать следующий код:
COleControl::OnResetState(); // Resets defaults found in DoPropExchange m_strText = AmbientDisplayName();
Измените функцию GetMyProp так, чтобы она будет содержать следующий код:
if(AmbientUserMode()) { GetWindowText(m_strText); m_nMyNum = (short)_ttoi(m_strText); } return m_nMyNum;
Теперь можно выполнить построение проекта, который регистрируется элемент управления. При вводе элемент управления в диалоговое окно, свойства Поле данных и Источник данных будут добавлены и теперь choice источника данных и поля для отображения в элементе управления.
См. также
Ссылки
Элементы управления, связанные с данными (ADO и RDO)