Извините за глупый вопрос, с вашей библиотекой познакомился недавно.
Прочитал туториалы от Харьковского Зверька, вроде бы кое-что получается (в рамках этих туториалов). А что дальше? Хотелось бы познакомиться с библиотекой получше, но.. нет документации. Хотя судя по сообщениям на форуме, народ разобрался с ней не плохо. Даже пишут дополнения (кажется, behaviors называется). Может все-таки можно где-то почитать про это подробнее? Или хотя бы ссылки на форумы, где осуждаються наиболее жизненные вопросы. С трудом верится, что со всеми возможностями разбираются по комментариям из исходных текстов и файлам из HTMLayoutSDK\html_samples. Автор вносит каждый раз изменения, а на примерах это не отражается. На http://terrainformatica.com нашел только несколько справочных страниц, и раздел для начинающих, который повторяет здешние туториалы
Еще раз прошу прощения за ламеризм и наглость . Трудно отказаться от подобной бесплатной библиотеки
1. Надо понимать что основа библиотеки — HTML и CSS и за документацией надо ходить на w3c.org. Впрочем, лично мне хватает моих навыков вёрстки HTML. На сайте есть список специфических для библиотеки тегов и аттрибутов. Ничего особенного, логическое продолжение уже существующих стандартов в контексте библиотеки для UI.
2. Behavior это как оконная процедура, но для отдельного элемента HTML. Ну и, в отличие от оконной процедуры, все необработанные сообщения передаются вверх по иерархии. Про разработку behavior надо в контексте языка. С Си++ помогут многие, говорят ShaggyOwl большой гуру С C# — я помогу, с Руби — Зверёк.
Здравствуйте, adontz, Вы писали:
A>1. Надо понимать что основа библиотеки — HTML и CSS и за документацией надо ходить на w3c.org. Впрочем, лично мне хватает моих навыков вёрстки HTML. На сайте есть список специфических для библиотеки тегов и аттрибутов. Ничего особенного, логическое продолжение уже существующих стандартов в контексте библиотеки для UI.
A>2. Behavior это как оконная процедура, но для отдельного элемента HTML. Ну и, в отличие от оконной процедуры, все необработанные сообщения передаются вверх по иерархии. Про разработку behavior надо в контексте языка. С Си++ помогут многие, говорят ShaggyOwl большой гуру С C# — я помогу, с Руби — Зверёк.
Большое спасибо за ответ, не ожидал что будет так быстро
Да, язык С++. Не хотелось бы утомлять вас расспросами.. Просто хотел спросить, в какую сторону копать и какие исходники читать. Собственно интересует принцип этих behaviors. Насколько я понял, с их помощью можно доделать все что хочется и чего нет в библиотеке — если это оконная процедура, там можно обрабатывать WM-сообщения (или только HTMLayout notifications?) и прорисовывать эти нестандартные для библиотеки DOM-элементы с помощью GDI/Opengl?
А как писались все эти дополнения из HTMLayoutSDK\include\behaviors? В комментариях большинство создателей — сторонние разработчики. Значит где-то было подобие help'а? Или консультации автора? Хотя на форуме веток на эту тему не нашел
behavior это фактически микро-окно со своей element_proc (аналог WinProc в Windows)
behaviors назначается DOM эдементу в CSS — #myelement { behavior: name-of-my-behavior; }
Собсвенно это основа. Т.е. твой behavior это набор методов handle_mouse(), handle_draw() и пр.
Очень близко по своей идее к WinProc и WM_LBUTTONDOWN, WM_PAINT и пр.
Здравствуйте, c-smile, Вы писали:
CS>Собсвенно это основа. Т.е. твой behavior это набор методов handle_mouse(), handle_draw() и пр. CS>Очень близко по своей идее к WinProc и WM_LBUTTONDOWN, WM_PAINT и пр.
Создал файл cpp в дополнение к основному проекту, написал в нем следующее (по примеру других behaviors, найденных в каталоге include/behaviors)
#include <windows.h>
#include <htmlayout.h>
using namespace htmlayout;
struct myev_handler: public behavior {
myev_handler():behavior(HANDLE_ALL, "mybeh") {};
virtual BOOL handle_event(HELEMENT el, HELEMENT target, BEHAVIOR_EVENTS type, UINT_PTR reason) {
::MessageBox(0, "Hi from mybeh :)", 0, 0);
return TRUE;
}
};
myev_handler hndlss;
Дальше в html документе объявил
<div style="behavior: mybeh clickable">This is my div</div>
Никакой реакции . Ни на движение мыш, ни на нажатия
Такое чувство, что кроме простого инстанцирования объекта, нужно еще что-то... А для остальных h-файлов с behaviors (тех что идут в SDK) тоже недостаточно простого #include?
А как писались все эти дополнения из HTMLayoutSDK\include\behaviors? В комментариях большинство создателей — сторонние разработчики. Значит где-то было подобие help'а? Или консультации автора? Хотя на форуме веток на эту тему не нашел
Здравствуйте, Lightlace, Вы писали:
L>Дальше в html документе объявил L>
L><div style="behavior: mybeh clickable">This is my div</div>
L>
Что такое clickable? Если хочешь чтобы behavior реагировал на нажатия мыши, передавай в конструкторе HANDLE_MOUSE (или, как в твоем примере HANDLE_ALL)
L>Никакой реакции . Ни на движение мыш, ни на нажатия
См. метод handle_mouse
handle_event используется для других вещей:
HTMLayoutSDK/include/htmlayout_dialog.hpp
// notification events from builtin behaviors — synthesized events: BUTTON_CLICK, VALUE_CHANGED
// see enum BEHAVIOR_EVENTS
Здравствуйте, ShaggyOwl, Вы писали:
SO>Здравствуйте, Lightlace, Вы писали:
L>>Дальше в html документе объявил L>>
L>><div style="behavior: mybeh clickable">This is my div</div>
L>>
SO>Что такое clickable? Если хочешь чтобы behavior реагировал на нажатия мыши, передавай в конструкторе HANDLE_MOUSE (или, как в твоем примере HANDLE_ALL)
L>>Никакой реакции . Ни на движение мыш, ни на нажатия SO>См. метод handle_mouse SO>
SO>handle_event используется для других вещей: SO>HTMLayoutSDK/include/htmlayout_dialog.hpp SO>// notification events from builtin behaviors — synthesized events: BUTTON_CLICK, VALUE_CHANGED SO>// see enum BEHAVIOR_EVENTS
Спасибо! Но вопрос немного в другом — только что прочитал, что нужно регистрировать behavior в обработчике нотификации HLN_ATTACH_BEHAVIOR. Только как это сделать не могу сообразить. Можете ткуть в пример из SDK?
Пробовал
class CMyWtlWindow:
public CWindowImpl<CMyWtlWindow, CHTMLayoutCtrl>,
public CHTMLayoutHost<CMyWtlWindow> {}
И в обработчике OnCreate формы вызвал SetCallback()
(нашел на форуме ветку на эту тему), но даже с подключенным atlhtmlayout.h пишет что класс CHTMLayoutHost не найден . Может со времени того поста что-то в реализации поменялось?
И что означает вызов метода LoadHtmlResource("EMPTY")?
P.S. Извиняюсь за глупые вопросы, никак не могу стартовать самостоятельно
Здравствуйте, ShaggyOwl, Вы писали:
SO>Здравствуйте, Lightlace, Вы писали:
L>>Дальше в html документе объявил L>>
L>><div style="behavior: mybeh clickable">This is my div</div>
L>>
SO>Что такое clickable? Если хочешь чтобы behavior реагировал на нажатия мыши, передавай в конструкторе HANDLE_MOUSE (или, как в твоем примере HANDLE_ALL)
clickable описан здесь
L>>Никакой реакции . Ни на движение мыш, ни на нажатия
Здравствуйте, Lightlace, Вы писали:
L>Здравствуйте, ShaggyOwl, Вы писали:
L>Спасибо! Но вопрос немного в другом — только что прочитал, что нужно регистрировать behavior в обработчике нотификации HLN_ATTACH_BEHAVIOR. Только как это сделать не могу сообразить. Можете ткуть в пример из SDK?
htmlayoutsdk/win32 — это pure win32 sample.
А именно файл win32.cpp там.
Обратить внимание на:
HTMLayoutSetCallback(hWnd,&HTMLayoutNotifyHandler,0);
и смотри саму функцию HTMLayoutNotifyHandler() и в ней вызов OnAttachBehavior()
L>Пробовал L>
L>class CMyWtlWindow:
L> public CWindowImpl<CMyWtlWindow, CHTMLayoutCtrl>,
L> public CHTMLayoutHost<CMyWtlWindow> {}
L>
L>И в обработчике OnCreate формы вызвал SetCallback() L>(нашел на форуме ветку на эту тему), но даже с подключенным atlhtmlayout.h пишет что класс CHTMLayoutHost не найден . Может со времени того поста что-то в реализации поменялось?
L>И что означает вызов метода LoadHtmlResource("EMPTY")?
Здравствуйте, c-smile, Вы писали:
CS>clickable описан здесь
Полезная штука, не знал про ее существование.
CS>Насколько я понял есть желание обрабатывать BUTTON_CLICK на самом элементе поэтому вполне себе нормальный вариант с clickable.
Получается так.
Хорошо там, где мы есть! :)
Re[7]: С чего начать
От:
Аноним
Дата:
23.09.08 22:53
Оценка:
SO>>Здравствуйте, Lightlace, Вы писали:
Привет, подскажите, что делаю неправильно
Попробовал создать behavior, как здесь описано, который не хочет работать. Сил моих больше нет
<HTML>
<style>
#btn
{
behavior: mybehavior;
width: 100;
height: 30;
}
</style>
Hi there
<br>
<input type="button" id="btn" />
</HTML>
Может что-то пропустил? Заранее спасибо
Re[8]: С чего начать
От:
Аноним
Дата:
23.09.08 23:00
Оценка:
Здравствуйте, Аноним, Вы писали:
А> behavior: mybehavior;
Извиняюсь, в коде было, конечно же, test_behavior. Просто опечатка
Но все равно не работает
Re[9]: С чего начать
От:
Аноним
Дата:
23.09.08 23:09
Оценка:
Еще раз извините Проблема решена
Тогда такой вопрос: встроенные обработчики (handle_mouse, handle_event) обрабатывают не все события, а только те, которые не были обработаны вышестоящими behaviors. Верно?
А как можно реализовать behavior на C, без использования наследования? Придется разворачивать все классы из htmlayout_behaviors.hpp? Или где-то есть уже готовая реализация?
Здравствуйте, Аноним, Вы писали:
А>Еще раз извините Проблема решена
А>Тогда такой вопрос: встроенные обработчики (handle_mouse, handle_event) обрабатывают не все события, а только те, которые не были обработаны вышестоящими behaviors. Верно?
Ты получаешь все bubbling events.
enum PHASE_MASK
{
BUBBLING = 0, // bubbling (emersion) phase
SINKING = 0x08000, // capture (immersion) phase, this flag is or'ed with EVENTS codes below
HANDLED = 0x10000 // event already processed.
};
Т.е.
case MOUSE_DOWN: // not processed by any child.case MOUSE_DOWN | HANDLED: // was processed by some child.
А>А как можно реализовать behavior на C, без использования наследования? Придется разворачивать все классы из htmlayout_behaviors.hpp? Или где-то есть уже готовая реализация?
behavior (именованный event handler) это конструкция близкая к hwnd у которого WinProc это ElementEventProc
Еще такой вопрос появился: попытался добавить рисующий behavior (htmlayout_canvas.hpp), после чего компилятор выдает 135 ошибок, наподобие
1>c:\program files\microsoft visual studio 9.0\vc\outer_libs\htmlayoutsdk\include\htmlayout_graphin.h(149) : error C2059: syntax error : '__stdcall'
1>c:\program files\microsoft visual studio 9.0\vc\outer_libs\htmlayoutsdk\include\htmlayout_graphin.h(149) : error C2061: syntax error : identifier 'HPLATFORMGFX'
1>c:\program files\microsoft visual studio 9.0\vc\outer_libs\htmlayoutsdk\include\htmlayout_graphin.h(149) : error C2091: function returns function
1>c:\program files\microsoft visual studio 9.0\vc\outer_libs\htmlayoutsdk\include\htmlayout_graphin.h(149) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files\microsoft visual studio 9.0\vc\outer_libs\htmlayoutsdk\include\htmlayout_graphin.h(149) : warning C4183: 'GRAPHIN_RESULT': missing return type; assumed to be a member function returning 'int'
1>c:\program files\microsoft visual studio 9.0\vc\outer_libs\htmlayoutsdk\include\htmlayout_graphin.h(154) : error C2059: syntax error : '__stdcall'
и т. д.
Если я к своему проекту просто добавляю behavior_clock_graphin.cpp, выдаются те же ошибки. Может нужно дополнительно дополнительно указывать какие-то define'ы?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, c-smile, Вы писали:
А>Если я к своему проекту просто добавляю behavior_clock_graphin.cpp, выдаются те же ошибки. Может нужно дополнительно дополнительно указывать какие-то define'ы?
По всей видимости _WINDOWS макро констнанта не описана? По умолчанию VS её описывает для всех windows проектов...
Обрати внимание что htmlayout_canvas.hpp это рисующий behavior использующий Graphin/AGG примитивы. Рисовать можно и без них. Например с помощью GDI примитивов. Можно кстати и GDI+ использовать если Graphinа не хватает.
Re[13]: С чего начать
От:
Аноним
Дата:
28.09.08 13:26
Оценка:
Здравствуйте, c-smile, Вы писали:
CS>По всей видимости _WINDOWS макро констнанта не описана? По умолчанию VS её описывает для всех windows проектов...
CS>Обрати внимание что htmlayout_canvas.hpp это рисующий behavior использующий Graphin/AGG примитивы. Рисовать можно и без них. Например с помощью GDI примитивов. Можно кстати и GDI+ использовать если Graphinа не хватает.
Спасибо, именно в константе и была проблема
Re[13]: С чего начать
От:
Аноним
Дата:
28.09.08 20:53
Оценка:
Здравствуйте, c-smile, Вы писали:
CS>Обрати внимание что htmlayout_canvas.hpp это рисующий behavior использующий Graphin/AGG примитивы. Рисовать можно и без них. Например с помощью GDI примитивов. Можно кстати и GDI+ использовать если Graphinа не хватает.
Да, нужен именно антиалиасинг, в Graphin просто интерфейс попроще, чем у GDI+
А Graphin позволяет рисовать незамкнутые кривые Безье?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, c-smile, Вы писали:
CS>>Обрати внимание что htmlayout_canvas.hpp это рисующий behavior использующий Graphin/AGG примитивы. Рисовать можно и без них. Например с помощью GDI примитивов. Можно кстати и GDI+ использовать если Graphinа не хватает.
А>Да, нужен именно антиалиасинг, в Graphin просто интерфейс попроще, чем у GDI+
А>А Graphin позволяет рисовать незамкнутые кривые Безье?