Шаг 201.
Среда программирования Visual C++.
Определение интерфейса элемента управления. Добавление свойства

    На этом шаге мы рассмотрим алгоритм добавления свойств.

    ControlWizard определяет в элементе управления два диспетчерских интерфейса: _DOneArmedBandit и _DOneArmedBanditEvent. В первый мы добавим методы и свойства, а во второй - собьггия. Хотя мы можем сделать это, щелкая правой кнопкой мыши элементы интерфейса и выбирая соответствующую команду из контекстного меню, лучше все-таки воспользоваться мастером ClassWizard.

Добавление свойства

    Сейчас мы добавим в класс COneArmedBanditCtrl стандартные свойства ForeColor и BackColor и специальное свойство NumberOfSymbols.

    Все новые свойства перечислены в 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 Кб).

    На следующем шаге мы рассмотрим постоянство свойств.




Предыдущий шаг Содержание Следующий шаг