Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование CDHtmlDialog, динамичекое создание страницы 
:(
    Опции темы
S.A.P.
Дата 18.10.2004, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Недавно узнал о существовании класса CDHtmlDialog, и решил, что он как нельзя лучше подходит для интерфейса моей будущей программы :) .
Но вопрос вот в чем: можно ли (а если да, то как) програмно сгенерировать HTML текст (пусть он, скажем, будет храниться в CStringList), а потом привязать его к моему объекту класса CDHtmlDialog, вместо привязывания HTML из ресурса, что стоит по умолчанию?
Но это еще не все :) . Как потом привязать обработчики событий к динамически сгенерированным контроллам? Обработчики должны быть на C++, а не на Java Script.
:sample
PM MAIL   Вверх
S.A.P.
Дата 18.10.2004, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ну че никто не знает что ли? :(

Народ! Выручайте!
PM MAIL   Вверх
S.A.P.
Дата 1.11.2004, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ссори, подниму последний раз. А вдруг ответят :( .
PM MAIL   Вверх
Step
Дата 2.11.2004, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



Цитата(Perchilla @ 18.10.2004, 09:54)

можно ли (а если да, то как) програмно сгенерировать HTML текст

думаю можно. к сожелению сейчас нету МСДН под рукой... ищите....


Цитата(Perchilla @ 18.10.2004, 09:54)

Как потом привязать обработчики событий к динамически сгенерированным контроллам? Обработчики должны быть на C++, а не на Java Script.

я подозреваю что вам нужно просто обрабатывать вм_сомманд и там проверять мессаки от контролов, а вернее ид контрола и ид мессаги


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
S.A.P.
Дата 2.11.2004, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Step @ 2.11.2004, 11:41)

думаю можно. к сожелению сейчас нету МСДН под рукой... ищите....

Есть MSDN. Там документ представляется в виде каких - то SAFEARRAY, а я что то разобраться не могу как они работают.
PM MAIL   Вверх
Coocky
Дата 2.11.2004, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Через неделю будет топик.Жди :) У меня по программе обучения только начинается Интернет :)


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
S.A.P.
Дата 2.11.2004, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Coocky постарайся как можно быстрее. Буду очень благодарен :thumbs-up .
PM MAIL   Вверх
Coocky
Дата 2.11.2004, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Цитата
Coocky постарайся как можно быстрее. Буду очень благодарен

Как в Академии учат,так и могу :)
В чем ,конретно загвоздка?


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
S.A.P.
Дата 2.11.2004, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Coocky @ 2.11.2004, 22:56)

В чем ,конретно загвоздка?

Суть загвоздки, собственно в вопросе. Буду дико благодарен за пример, который привязывает HTML текст из какого - нибудь контейнера типа CStringList к диалогу и обрабатывает событие от какого - нибудь элемента.
PM MAIL   Вверх
Coocky
Дата 2.11.2004, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Цитата
Буду дико благодарен за пример, который привязывает HTML текст из какого - нибудь контейнера типа CStringList к диалогу и обрабатывает событие от какого - нибудь элемента.

Завтра прогу похожую скину.Может подойдет.Расмотришь через компилятор.Ок?Хотя мало че поймешью.
Программированию под Инет посвящены книги.


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Gorbatovsky
Дата 3.11.2004, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 4.9.2003
Где: Киев

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



Я недавно использовал класс class CHtmlView

Код


FILE *fil=fopen(file_name,"w+r");
   if(fil==NULL){
 Message_err("Problem to open file !");
 return FALSE;
 }
DesignTask->WriteHtmlFile(fil);

///////забрасываем файл в вид для просмотра печати
if(view)
 view->Navigate2(_T(file_name),NULL,NULL);



таким образом я пишу в файл содержимое страницы, а потом его читаю.
Для обработки данных введеных пользователем тебе нужно парсить содержимое CHtmlView
PM MAIL ICQ   Вверх
S.A.P.
Дата 3.11.2004, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ну это то понятно. Таким же макаром можно и с DHTMLDialog это провернуть: записать в файл, а потом привязать. Но мне не очень хочется, чтобы документ был доступен через HTM файл во время работы программы :(
Цитата(Gorbatovsky @ 3.11.2004, 21:07)

парсить содержимое CHtmlView

вот это слово мне не очень нравится :( . Т.е. ты хочешь сказать, что я не могу напрямую привязать сишный код к HTML объекту, скажем по его ID, устанавливаемом в HTML тексте?
PM MAIL   Вверх
Gorbatovsky
Дата 3.11.2004, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 4.9.2003
Где: Киев

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



Я ведь использовал CHtmlView, поэтому и ипользовал парсинг.
В классе CDHtmlDialog, наверное, можно получать события и получить доступ к к элементам интерфейса странички. Год назад я на эту тему делал опрос (на этом форуме) , но никто не подсказал ничего кроме парсинга. Но время не стоит на месте. Меня эта тема тоже интересует. Очень интересная мысль в своих целях использовать CHtmlView и CDHtmlDialog. Открывается много возможностей...
PM MAIL ICQ   Вверх
S.A.P.
Дата 3.11.2004, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



:offtopic
Цитата(Gorbatovsky @ 3.11.2004, 22:14)

Открывается много возможностей...

вот я тоже так подумал. Если использовать в своих программах гибкость DHTML (в качестве интерфейса), то программирование интерфейса перестает быть головной болью, как считалось раньше по отношению к VC++ . :hmmm

Это сообщение отредактировал(а) Perchilla - 3.11.2004, 23:11
PM MAIL   Вверх
Texel
Дата 3.12.2004, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Люди, мне тоже очень интересна эта тема, за это время вы нашли её решение?
PM MAIL   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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