Доброго времени суток !
Недавно попробавал возможности HTMLayout — библиотека классная!
Суть вопроса такая: пытаюсь создать на WTL приложение использующее HTMLayout (такое же как browse),
вроде работает со всеми примерами, но с закладками не работает
(html_samples\forms\tabs.htm).
Знаю что где то что-то недоделал/недопонял, но не пойму что
html файл :
html_samples\forms\tabs.htm
код приложения:
.h файл
class CMainDlg : public CDialogImpl<CMainDlg>,
public CHTMLayoutHost<CMainDlg>,
htmlayout::event_handler
{
public:
CMainDlg() : event_handler(HANDLE_BEHAVIOR_EVENT){}
BEGIN_MSG_MAP(CMainDlg)
CHAIN_TO_HTMLAYOUT()
...
END_MSG_MAP()
CHTMLayoutCtrl m_htmlView;
virtual BOOL on_event (HELEMENT he, HELEMENT target, BEHAVIOR_EVENTS type, UINT_PTR reason);
...
}
.cpp файл
LRESULT CMainDlg::OnInitDialog(...)
{
m_htmlView.CreateLayout(*this, rcClient, NULL, WS_CHILD | ...);
SetCallback();
if(!m_htmlView.OpenFile(_T("test.htm")))
...
attach_event_handler(dom::element::root_element(m_htmlView.m_hWnd), this);
...
}
BOOL
CMainDlg::on_event(HELEMENT he, HELEMENT target, BEHAVIOR_EVENTS type, UINT_PTR reason)
{
// Если клацать по button, check-box и т.д. сюда все доходит нормально
// Если по закладкам (tabs) всё тихо
switch (type)
...
}
По нажатию на таб ничего не происходит(ни переключения, ни нотификации), содержимое таба не отоброжается.
Что не так ???
Спасибо.
Здравствуйте, McGor, Вы писали:
SO>>Наивный вопрос: behavior_tabs.cpp в проект добавил?
MG>Нет ... но его я также не обнаружил и в solution'e browse.
Этот файл находится в HTMLayoutSDK\include\behaviors\
Добавь его в проект.
MG>Подключить, а потом что ...
По симптомам, есть предположение, что у тебя в программе не подключен behavior tabs (это поведение не встроено в HTMLayout, а подключается пользователем самостоятельно)
После включении файла, во время запуска программы будет создан экземпляр этого behavior и далее, при загрузке html подключен к соответствующему DOM-элементу.
Если интересны детали, посмотри Зверьковские статьи
http://www.terrainformatica.com/wiki/doku.php?id=htmlayout:tutorial-basics-r
http://www.rsdn.ru/forum/message/2240494.1.aspxАвтор: Зверёк Харьковский
Дата: 29.11.06
Здравствуйте, ShaggyOwl, Вы писали:
SO>По симптомам, есть предположение, что у тебя в программе не подключен behavior tabs (это поведение не встроено в HTMLayout, а подключается пользователем самостоятельно)
SO>После включении файла, во время запуска программы будет создан экземпляр этого behavior и далее, при загрузке html подключен к соответствующему DOM-элементу.
SO>Если интересны детали, посмотри Зверьковские статьи
SO>http://www.terrainformatica.com/wiki/doku.php?id=htmlayout:tutorial-basics-r
SO>http://www.rsdn.ru/forum/message/2240494.1.aspxАвтор: Зверёк Харьковский
Дата: 29.11.06
Спасибо , за направление на путь истинный
Подключил behaviors/behavior_tabs.cpp.
Но всё равно закладки не переключались и содержимое не отоброжаллось ... CHTMLayoutHost::callback -> CHTMLayoutHost::OnHtmlNotify никогда не вызывался, соответственно HLN_ATTACH_BEHAVIOR не обрабатывался.
Проблема была в том что я наследовался от CHTMLayoutHost и event_handler , НО ВМЕСТО public CDialogImpl<CMainDlg, CHTMLayoutCtrl>, было CDialogImpl<CMainDlg> , а CHTMLayoutCtrl был как член класса.
вот код который заработал
.h
class CMainDlg :public CDialogImpl<CMainDlg
, CHTMLayoutCtrl>,
public CHTMLayoutHost<CMainDlg>,
public htmlayout::event_handler
{
...
//CHTMLayoutCtrl m_htmlView;
...
}
.cpp
#include <behaviors/behavior_tabs.cpp>
...
LRESULT CMainDlg::OnInitDialog(...)
{
//m_htmlView.CreateLayout(*this, rcClient, NULL, WS_CHILD | ...);
SetCallback();
if(!
/*m_htmlView.*/OpenFile(_T("test.htm")))
...
attach_event_handler(dom::element::root_element(
/*m_htmlView.*/m_hWnd), this);
...
}
И спс за ссылочки.