Поделиться через


Элементы управления ActiveX в Интернете

Элементы управления ActiveX обновленную версию спецификации элемента управления OLE. Элементы управления базовая архитектура для разработка программируемых программные компоненты, которые могут использоваться в контейнерах, включая различные модели COM языковых веб-браузера в Интернете. Любой элемент управления ActiveX может быть элементом управления Интернета и может добавлять его возможности к активному документу или быть частью страницы. Элементы управления на странице могут взаимодействовать друг с другом с помощью скрипта.

Элементы управления ActiveX не ограничиваются интернета. Элемент управления ActiveX также можно использовать в любом контейнере, если элемент управления поддерживает интерфейсы требуется этим контейнером.

Элементы управления ActiveX имеют несколько преимуществ, включая:

  • Требуемых интерфейсов меньше, чем предыдущие элементы управления OLE.

  • Возможность быть безоконный и всегда на месте активен.

Для элемента управления ActiveX элемент управления.

  • Поддерживают интерфейс IUnknown.

  • COM-объект.

  • Экспортировать DLLRegisterServer и DLLUnRegisterServer.

  • Интерфейсы, как для поддержки дополнительных функций.

Создание существующие элементы управления дружественной к приложению

Разработка элемента управления, который будет работать должным образом на основе веб-форм требуется вопроса для относительно низких показателей передачи в Интернете. Можно использовать существующие элементы управления; однако следует принять меры, чтобы объем кода более маленьким и сделать их свойства элемента управления загрузить асинхронно.

Чтобы улучшить производительность элементов управления, выполните следующие рекомендации по вопросам эффективности:

  • Реализуйте методы, описанные в статье Элементы управления ActiveX. Оптимизация.

  • Рассмотрим, как элемент управления экземпляра.

  • Является асинхронным; не задержите другие программы.

  • Чтобы загрузить данные в маленькими блоками.

    Загрузя большие потоки как растровые изображения или видеоматериалы данные, чтобы получить данные, обрабатываемые асинхронно в сотрудничестве с контейнером. Извлечение данных в добавочной или прогрессивной таким, работающий совместно с другими элементами управления, также могут получить данные. Код также может загрузить асинхронно.

  • Код и свойств нагрузки в фоновом режиме.

  • Интерфейс пользователя стали активными как можно быстрее.

  • Рассмотрим, как упорный хранятся данные, свойства и большие большие двоичные объекты данных (например, изображение растрового изображения или видеоматериалы данные).

    Элементы управления со значительными количествами упорных данных, например большие растровые изображения или файлы формат AVI, требуют особого внимания к загрузить метод. Документ или страницы могут быть видимыми как можно скорее, дающие пользователю возможность взаимодействовать со страницей, элементы управления извлекает данные в фоновом режиме.

  • Запись экономические режимы работы, чтобы сохранить размер и время выполнения кода вниз.

    Малые кнопки и элемента управления "Метка", с небольшое число байтов упорных данных, подходят для использования на основе Интернета и хорошо работают внутри браузера.

  • Рассмотрим ход выполнения взаимодействует с контейнером.

    Уведомляет контейнер хода выполнения в асинхронной загрузке, например когда пользователь может запустить для взаимодействия со страницей, и, если загрузка завершена. Контейнер может отображать ход выполнения (например, процент завершения) для пользователя.

  • Рассмотрим, как элементы управления зарегистрированными на клиентском компьютере.

Создание нового элемента управления ActiveX

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

Создание проекта с помощью мастера элементов управления ActiveX MFC

  1. Нажмите кнопку New в меню Файл.

  2. Выберите Мастер элементов ActiveX MFC из проектов Visual C++ имени проекта.

  3. На странице Параметры элементов управления, выберите Загружает свойства асинхронно. Выбор этого параметра настройка готовую национальную свойство и событие изменения состояния работают автоматически.

    Можно также choice другие виды оптимизации, например Активация без окна, которая описывается в разделе Элементы управления ActiveX. Оптимизация.

  4. Нажмите кнопку Готово, чтобы создать проект.

Создать класс, производный от CDataPathProperty

  1. Создайте класс, производный от CDataPathProperty.

  2. В каждом из файлов источника, который включает файл заголовка для элемента управления добавьте файл заголовка для этого класса перед ним.

  3. В этом классе, переопределите OnDataAvailable. Эта функция вызывается, когда данные доступны для отображения. По мере поступления данные, можно обработать его в любом случае следует выбрать, например последовательно обрабатывать его.

    Фрагмент кода ниже представлен пример последовательно отображения данных в элементе управления "Поле ввода". Обратите внимание на использование флажка BSCF_FIRSTDATANOTIFICATION для элемента управления "Поле ввода".

    void CMyDataPathProperty::OnDataAvailable(DWORD dwSize, DWORD bscfFlag)
    {
        CListCtrl list_ctrl;
        CEdit* edit = list_ctrl.GetEditControl();
        if ((bscfFlag & BSCF_FIRSTDATANOTIFICATION) && edit->m_hWnd)
        {
            edit->SetSel(0, -1);
            edit->Clear();
        }
    
       if (dwSize > 0)
       {
          CString string;
          LPTSTR str = string.GetBuffer(dwSize);
          UINT nBytesRead = Read(str, dwSize);
          if (nBytesRead > 0)
          {
             string.ReleaseBuffer(nBytesRead);
             edit->SetSel(-1, -1);
             edit->ReplaceSel(string);
          }
       }
    }
    

    Обратите внимание, что необходимо включить AFXCMN.H для использования класса CListCtrl.

  4. При изменении состояния элемента управления общие (например, от загрузки на инициализированный или пользователя), вызов интерактивного COleControl::InternalSetReadyState. Если элемент управления имеет только одно свойство информационного канала, можно добавить код в BSCF_LASTDATANOTIFICATION, чтобы убедиться, что контейнер загрузить завершена. Примеры.

    if (bscfFlag & BSCF_LASTDATANOTIFICATION)
    {
       GetControl()->InternalSetReadyState(READYSTATE_COMPLETE);
    }
    
  5. Переопределите метод OnProgress. В OnProgress, передаются число, указывающее максимальное дальность и отображение числа как можно ближе в текущей нагрузки. Можно использовать эти номера отображения состояния, такие как процент завершения пользователю.

Следующая процедура добавляет свойства в элемент управления для использования только производного класса.

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

  1. В Представление классов щелкните правой кнопкой мыши интерфейс под узлом библиотеки и выделите Добавить, а затем Добавить свойство. Запустится Мастер добавления свойства.

  2. В Мастер добавления свойства выберите переключатель Методы get и set, введите Имя свойства, например EditControlText и выделите строку BSTR как свойство Type.

  3. Нажмите кнопку Готово.

  4. Объявите переменную-член. CDataPathProperty- производный класс в класс элемента управления ActiveX.

    CMyDataPathProperty EditControlText;
    
  5. Реализуйте методы Get/Set. Для Get, возвратите строку. Для Set загрузите свойство и вызовите SetModifiedFlag.

    BSTR CMFCActiveXControlCtrl::GetEditControlText(void)
    {
       AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
       CString strResult;
       strResult = EditControlText.GetPath();   
       return strResult.AllocSysString();
    }
    
    void CMFCActiveXControlCtrl::SetEditControlText(LPCTSTR newVal)
    {
       AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
       Load(newVal, EditControlText);
       SetModifiedFlag();
    }
    
  6. В DoPropExchange добавьте следующую линия:

    PX_DataPath(pPX, _T("DataPath"), EditControlText);
    
  7. Переопределение ResetData для уведомления свойство, чтобы сбросить его элемент управления путем добавления этой линии.

    EditControlText.ResetData();
    

Решающ ли наследовать от CDataPathProperty или CCachedDataPathProperty

В предыдущем примере описаны шаги по наследование свойства элемента управления из CDataPathProperty. Это являются хорошим выбором, если требуется загрузить в реальном времени данные, которые часто изменяются, и для них не требуется, чтобы хранить все данные, но только текущее значение. Пример элемента управления биржевых кодов акций график по имеющимся данным

Также можно наследовать от CCachedDataPathProperty. В этом случае загруженный данных кэшируется в файле памяти. Это являются хорошим выбором, если необходимо хранить все загруженные данные (например, элемент управления, который последовательно отображает растровое изображение. В этом случае класс имеющему переменной-члена, содержащим данные.

CMemFile m_Cache;

В классе элемента управления ActiveX, могут использовать этот файл сопоставленного в памяти OnDraw для отображения данных. В элемент управления ActiveX CCachedDataPathProperty- производном классе, переопределить функцию-член OnDataAvailable и удалите элемент управления, после вызова реализации базового класса.

void CMyCachedDataPathProperty::OnDataAvailable(DWORD dwSize, DWORD bscfFlag)
{
   CCachedDataPathProperty::OnDataAvailable(dwSize, bscfFlag);
   GetControl()->InvalidateControl();
}

Сведения о загрузке асинхронно с помощью элементов управления ActiveX

Сведения о загрузке по сети необходимо произвести асинхронно. Преимущество методика, если большой объем данных передаются или если подключение медленно, процесс загрузки не блокирует другие процессы на клиенте.

Асинхронные моникеры предоставляют способ загрузить данные асинхронно по сети. Операция чтения в асинхронном моникере немедленно возвращает, даже если операция не завершается.

Например, если только 10 байт, доступных для записи и чтения, вызывает асинхронно на прочитанном файле 1K, не блокируется, но возвращает с в настоящее время доступны 10 байтов.

Реализуется с помощью класса асинхронные моникерыCAsyncMonikerFile. Однако элементы управления ActiveX могут использовать класс CDataPathProperty, наследующий от CAsyncMonikerFile, чтобы помочь реализовать асинхронные свойства элемента управления.

Пример ASYNDOWN демонстрируется настройка асинхронный цикла с помощью таймеры для чтения данных. ASYNDOWN подробно описано в статье «HOWTO базы знаний: AsyncDown показаны асинхронную загрузку данных» (Q177244) и доступен для загрузки из центра загрузки Майкрософт. (Дополнительные сведения о загрузя файлы из центра загрузки Майкрософт см. в статье «, как получить файлы поддержки Майкрософт из онлайновых служб» (Q119591) в Базе знаний Майкрософт). Статьи базы знаний можно найти на компакт-диске библиотеки MSDN или на https://support.microsoft.com/support.

Базовый метод, используемый в ASYNDOWN задания таймера в CDataPathProperty::OnDataAvailable, чтобы указать, когда данные. Если получено сообщение таймера, приложение считывает в блоки 128 байтов данных и заполняет элемент управления "Поле ввода". Если данные не доступен, когда сообщение таймера обрабатывается, таймер отключен. OnDataAvailable включит таймер, если больше данных попадает позже.

Отображение элемента управления на странице

Ниже приведен пример тега и атрибутов объекта для вставки элемент управления на странице.

<OBJECT

CLASSID="clsid:FC25B780-75BE-11CF-8B01-444553540000"

CODEBASE="/ie/download/activex/iechart.ocx"

ID=chart1

WIDTH=400

HEIGHT=200

ALIGN=center

HSPACE=0

VSPACE=0

>

<PARAM NAME="BackColor" value="#ffffff">

<PARAM NAME="ForeColor" value="#0000ff">

<PARAM NAME="url" VALUE="/ie/controls/chart/mychart.txt">

</OBJECT>

Обновление существующего элемента управления OLE для использования новых функций элемента управления ActiveX

Если элемент управления OLE был создан в версии Visual C++ — до 4.2, можно предпринять шаги, чтобы повысить его производительность и расширить его функциональные возможности. Подробное описание этих изменениях см. в разделе Элементы управления ActiveX. Оптимизация.

При добавлении асинхронной поддержка свойства к существующему элементу управления, самостоятельно придется добавлять готовая свойство свойство и событие ReadyStateChange. В конструкторе элемента управления добавьте:

m_lReadyState = READYSTATE_LOADING;

Обновлении состояние готовности как код загружен с помощью метода COleControl::InternalSetReadyState. Одно место следует вызвать InternalSetReadyState из переопределения CDataPathProperty- производного класса OnProgress.

Затем выполните шаги, описанные в разделе Создание нового элемента управления ActiveX.

См. также

Основные понятия

Задачи программирования для интернет-решений MFC

Основы программирования для интернет-решений MFC