На этом шаге мы рассмотрим алгоритм добавления свойств.
ControlWizard определяет в элементе управления два диспетчерских интерфейса: _DOneArmedBandit и _DOneArmedBanditEvent. В первый мы добавим методы и свойства, а во второй - собьггия. Хотя мы можем сделать это, щелкая правой кнопкой мыши элементы интерфейса и выбирая соответствующую команду из контекстного меню, лучше все-таки воспользоваться мастером ClassWizard.
Сейчас мы добавим в класс COneArmedBanditCtrl стандартные свойства ForeColor и BackColor и специальное свойство NumberOfSymbols.
Рис.1. Создание свойства BackColor
Рис.2. Создание специального свойства
Все новые свойства перечислены в ClassView в интерфейсе _DOneArmedBandit. Заметьте, что переменная-член и уведомляющая функция помещены в класс COneArmedBanditCtrl. Дважды щелкнув функцию OnNumberOfSymbolsChanged(), Вы просмотрите ее исходя текст в файле OneArmedBanditCtl.cpp. Созданная по умолчанию версия этой функции просто вызывает COLeControl::SetModifiedFlag().
В начале файла OneArmedBanditCtl.cpp Вы найдете такой код:
BEGIN_DISPATCH_MAP(COneArmedBanditCtrl, COleControl) //{{AFX_DISPATCH_MAP(COneArmedBanditCtrl) DISP_PROPERTY_NOTIFY(COneArmedBanditCtrl, "NumberOfSymbols", m_numberOfSymbols, OnNumberOfSymbolsChanged, VT_I2) DISP_STOCKPROP_BACKCOLOR() DISP_STOCKPROP_FORECOLOR() //}}AFX_DISPATCH_MAP END_DISPATCH_MAP()
Этот код и соответствующий макрос DECLARE_DISPATCH_MAP в заголовочном файле реализуют диспетчерскую карту (dispatch map) этого класса. Диспетчерская карта очень похожа на карту сообщений. Отличие заключается в том, что вместо отображения сообщений на функции-обработчики класса она связывает запросы клиента Automation со свойствами и методами класса элемента управления. Например, когда клиент, написанный на Visual Basic, запрашивает свойство NumberOfSymbols, элемент управления использует диспетчерскую карту (а точнее, макрос DISP_PROPERTY_NOTIFY), чтобы узнать значение переменной m_numberOfSymbols и передать его клиенту:
Dim myobj As OneArmedBandit Set myobj = New OneArmedBandit MsgBox myobj. NumberOfSymbols
Как Вы увидите в коде диспетчерской карты, стандартные свойства поддерживаются соответствующими макросами.
Текст приложения можно взять здесь (28,5 Кб).
На следующем шаге мы рассмотрим постоянство свойств.