Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование CDHtmlDialog, динамичекое создание страницы 
:(
    Опции темы
alien_by
Дата 3.12.2004, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 29.11.2004
Где: Belarus/Gomel

Репутация: 5
Всего: 8



Господа, есть в этом диалоге метод Navigate, позволяет переместится на любой урл!!!.
Что касается связывания элементов диалога, для этого есть куча DDX-ов, которые можно использовать примерно так
Код

// Пишем универсальный контроллер обмена данными
void CMyDHtmlDlg::DoDataExchange(CDataExchange* pDX)
{
CDHtmlDialog::DoDataExchange(pDX);
for( для всех элементов нового диалога, которым это нужно)
  DDX_DHtml_ElementInnerText(pDX, массив названий элементов[..], *(массив указателей на переменные[..]));
// Аналогично для других типов связывания
}

// Переопределяем метод OnNavigateComplete, вызываемый после
// удачного выполнения Navigate
void CMyDHtmlDlg::OnNavigateComplete(
  LPDISPATCH pDisp,
  LPCTSTR szUrl
)
{
   // здесь заполняем массивы названий элементов
   // массивы указателей на переменные для связывания

   // Указываем системе обновить данные о структуре динамического связывания
   UpdateData(false);
}


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

Что касается приёма сообщений от обьектов.
Можно описать универсальную карту сообщений.

Существует всего 5 различных типов сообщений от документа
DHTML_EVENT(dispid, elemName, memberFxn)
Если параметр elemName установлен в NULL, то обработчик будет реагировать на любое сообщение данного типа/подтипа приходящее от документа.

DHTML_EVENT_CLASS(dispid, elemName, memberFxn)
Параметр elemName задаёт CSS класс к которому отностися элемент (т.е. тоже группирует элементы)

DHTML_EVENT_TAG(dispid, elemName, memberFxn)
Соответственно группирует элементы по тэгу

DHTML_EVENT_ELEMENT(dispid, elemName, memberFxn)
выбирает элемент по идентификатору

DHTML_EVENT_AXCONTROL(dispid, controlName, memberFxn)
то-же что и DHTML_EVENT_ELEMENT но для Active-X контролов

У них имеются подтипы.. Подтип задаётся параметром dispid.
Приведу пример.

Код

// описываем карту сообщений
BEGIN_DHTML_EVENT_MAP(CMyDHtmlDlg)
DHTML_EVENT(DISPID_HTMLELEMENTEVENTS_ONCLICK, NULL, OnDocElementClick)
END_DHTML_EVENT_MAP()

HRESULT CMyDHtmlDlg::OnDocElementClick(IHTMLElement *phtmlElement)
{
  IHTMLEventObj *eventObj = NULL;
  // Данная функция позволяет уточнить параметры сообщения, но в принципе
  // можно и без неё...
  if ( !FAILED(GetEvent(&eventObj)) )
  {
    // Выполняем некие действия
  }

  return S_OK
}


Это один из способов придания динамики с помощью стандартных инструментов. Есть ещё одна возможность, но здесь нужно провести некоторые исследования, на них у меня к сожалению, нет времени.

Вообщем идея в следующем, любой обмен данными или сообщениями осуществляется через некий недокументированный механизм базирующийся на наборе классов основанных на CDHtmlSinkHandler и IDispatch. Ежели у кого руки дойдут до него, поделитесь плз.
PM MAIL ICQ   Вверх
Texel
Дата 4.12.2004, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 3.12.2004

Репутация: нет
Всего: нет



У меня тут вопросы возникли относительно класса CMyDHtmlDlg. Кто-нибудь занет как его прикрутить к MFC SDI приложению? с использованием разделения окна сплитами? Например в одном окне TreeView а вдругом CMyDHtmlDlg. А то я начал роазбираться производные от сласса CDialog не "вставляются" в SDI. Там есть только классы FormView и HtmlView(этот не подходит).
Или подскажите как это организовать на ATL, если такое возможно...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0619 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.