Visual C++. Создание элемента управления ActiveX - Связь данных

ОГЛАВЛЕНИЕ

 

Связь данных

Как уже отмечалось, OLE-элемент управления может следить за изменением значений своих свойств. При втором способе реализации строится специальная функция уведомления, вызываемая при изменении значения. При третьем и четвертом способе для изменения значения всегда вызывается метод Set. Так что почти для всех способов реализации свойства элемент управления может фиксировать изменение значения своих свойств.

Иногда бывает важно, чтобы и контейнер мог следить за этими изменениями. Свойство называется связываемым (bindable), если имеет потенциальную возможность сообщить контейнеру об изменении своего значения.

Связывание делается в два этапа. На первом свойство добавляется, как это было описано, любым способом реализации, кроме первого. На втором этапе добавленное свойство получает статус связываемого. Для этого следует:

  • Вызвав ClassWizard, выбрать вкладку OLE Automation.
  • В окне списка “External Name” выбрать имя свойства.
  • Щелкнуть кнопку “Data Binding”.
  • В появившемся окне включить флажок “Bindable Proprty” и выбрать кнопку “OK”.

Теперь свойство получило потенциальную возможность уведомление контейнера о своих изменениях. Реализовать эту возможность и превратить связываемое свойство в связанное (bound) свойство можно в процессе работы элемента управления в контейнере. Для этого нужно вызвать один из двух методов BoundPropertyChanged или BoundPropertyRequestEdit . Вызываются эти функции либо в методе Set, либо в функции уведомления.

Связывание называется оптимистическим (optimistic data binding), если вызывается метод BoundPropertyChanged . При этом изменение свойства всегда выполняются, и контейнер только уведомляется о нем. Если вызывается метод BoundPropertyRequestEdit , связывание назывется пессимистическим (pessimistic data binding). Для этого типа связывания изменение значения свойства производится, если только результат вызова функции TRUE, что означает разрешение контейнера на изменение значения.