Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по программированию. Visual C++, MFC, VB, ActiveX


Служба Рассылок Subscribe.Ru

Visual C++. ActiveX. Уроки по программированию с сайта http://alexeev.nm.ru

Рассылка №16

Visual C++. ActiveX. Урок 11. Подсоединяем PropertyPage
Visual C++. ActiveX. Урок 12. Добавление стандартного свойства
Visual C++. ActiveX. Урок 13. Используем свойства окружения

Visual C++. ActiveX. Урок 11. Подсоединяем PropertyPage

На этом уроке мы с вами добавим к нашему ActiveX-элементу PropertyPage (окно со вкладками). Окно с вкладками позволяет группировать элементы в логические группы (а не по алфавиту, что, разумеется, не слишком удобно).

Перейдите на вкладку ResourceView, и раскройте узел Dialog. Мастер уже сделал некоторую работу за нас - вы видите диалог с идентификатором IDD_PROPPAGE_FIRSTAX для вкладки.

Сделайте на ней двойной щелчок. Появится редактор диалоговых окон. Так как у нашего элемента ActiveX свойство Number типа short, то логичным будет добавить на наше диалоговое окно элемент Edit.

После этого делаем стандартные действия для диалоговых окон - вызываем ClassWizard, переходим в нем на вкладку Member Variables, в combobox'е Class name выбираем наш класс окна со вкладками (у нас это CFirstAXPropPage), и нажимаем на кнопку Add Variables. В появившемся диалоге Add Member Variable в качестве имени переменной задаем m_number, категории - Value, типа переменной - short и, что самое важное, в Optional Property Name задаем имя нашего единственного свойства (т. е. Number).

Нажимаем OK для закрытия диалога Add Member Variable, после чего закрываем и ClassWizard.

Откомпилируйте наш ActiveX. Теперь при помещении его в другую программу вы сможете вызвать для него окно свойств со вкладкой (пока она будет только одна), на которой вы сможете задать значение для нашего свойства Number.

Кроме того значение, задаваемое для свойства Number в нашем окне со вкладками, во-первых, сохраняется (подробности в уроке 9) и, во-вторых, отображается в обычном окне свойств Visual Basic'а.

Наверх

Visual C++. ActiveX. Урок 12. Добавление стандартного свойства

На этом уроке мы с вами добавим стандартное свойство для нашего элемента ActiveX, а именно - свойство для задания цвета нашего эллипса.

Для добавления стандартного свойства проделайте следующие действия. Включите ClassWizard и перейдите в нем на вкладку Automation. Выберите в combobox'е Class name класс CFirstAXCtrl. Нажмите на кнопку Add Property. В появившемся окне Add Property заполните данные следующим образом: External name - ForeColor, в группе радиокнопок Implementation выберите Stock (т. е. встроенное свойство).

Обратите внимание на снегерированные названия Get- и Set-функций - GetForeColor и SetForeColor (они нам пригодятся чуть позже). Нажмите на OK для закрытия диалогового окна и еще раз на OK в окне ClassWizard'а для закрытия его.

Компилируйте наш элемент ActiveX.

Теперь в тестовом проекте появится стандартное свойство ForeColor. В Visual Basic оно будет выглядеть, как и остальные свойства для выбора цвета (с двумя вкладками - Palette и System для нестандарьных и системных цветов).

В Visual C++ в тестовой проекте это свойство тоже появится (на вкладке All в окне свойств для элемента ActiveX).

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

void CFirstAXCtrl::OnDraw(
            CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
    // TODO: Replace the following code with your own drawing code.
    pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
    COLORREF fColor = TranslateColor(GetForeColor());
    CBrush br; //Заводим кисть
    br.CreateSolidBrush(fColor); //Создаем кисть цвета fColor
    pdc->SelectObject(&br); //Приписываем кисть к контексту устройства
    pdc->Ellipse(rcBounds); //Рисуем эллипс
}

Обсудим строчку (смысл остальных строк более-менее ясен из комментариев)

    ...
    COLORREF fColor = TranslateColor(GetForeColor());
    ...

Здесь мы вызываем метод GetForeColor(). Его нет на вкладке ClassView, но, тем не менее, он все равно присутствует и его можно использовать. Помните, когда мы задавали встроенное свойство ForeColor, то в диалоговом окне Add Property появилось два метода - GetForeColor и SetForeColor (см. первую картинку в этом уроке). Метод GetForeColor возвращает цвет, но типа OLE_COLOR, а нам надо типа COLORREF. Для перевода мы и использум функцию TranslateColor. К методу GetForeColor есть парный SetForeColor. С его помощью можно задавать цвет (свойство ForeColor).

Компилируем проект и испытываем его в тестовой программе. Цвет у эллипса будет меняться при изменении свойства ForeColor.

Наверх

Visual C++. ActiveX. Урок 13. Используем свойства окружения

На этом занятии мы с вами посмотрим, как ваш элемент ActiveX может использовать свойства своего окружения (т. е. свойства своего контейнера). Например, элемент ActiveX может выяснить, что за цвет фона у контейнера, и сделать себе такой же. Или использовать шрифт своего контейнера (предваритеьно выяснив его).

Давайте в качестве примера рассмотрим, как элемент ActiveX может прочитать свойство BackColor своего контейнера и устновить себе такое же значение для этого свойства. Для этого внесите в метод OnDraw класса CFirstAXCtrl следующие изменения:

void CFirstAXCtrl::OnDraw(
   CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
    // TODO: Replace the following code with your own drawing code.
    pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
    COLORREF colorBack; //Переменная для цвета
    //Берем цвет контейнера и преобразуем его из типа OLE_COLOR в тип COLORREF
    colorBack = TranslateColor(GetBackColor());
    CBrush brush; //Заводим кисть
    brush.CreateSolidBrush(colorBack); //Создаем кисть цвета colorBack (т. е. цвета BackColor контейнера)
    CBrush* pOldBrush=pdc->SelectObject(&brush); //Приписываем кисть к pdc
    pdc->Ellipse(rcBounds);//Рисуем эллипс
}

Компилируем проект, после чего испытываем его в Visual Basic. Для испытания измените у формы (которая будет контейнером для нашего элемента ActiveX) свойство BackColor (например, на розовый цвет). При размещении на форме нового экземпляра нашего элемента ActiveX эллипс на нем нарисуется таким же цветом!

Таким образом наш ActiveX прочитал одно из свойств своего контейнера!

Наверх

Copyright Алексеев Игорь, 2001

Copyright cайт alexeev.nm.ru, 2001



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное