HTMLayout

Давно слышал но ни разу не пользовался HTMLayout-ом
Вот таки дошли ручки, решил использовать в своем небольшом приложении

С EXE файлом нужно распространять htmlayout.dll , лицензия кстати без ограничений.
Подключать либу в код просто:
Создаем для примера простое WTL SDI приложение и редактируем view-класс (CHTMLView в моих примерах):

Меняем заголовок класса :

class CHTMLView :
public CWindowImpl,
public CHTMLayoutHost,
public htmlayout::event_handler

Обязательно добавляем в конструктор инициализацию конструктора event_handler (в данном случае указывается что обрабатывать будем все события)

CHTMLView() : event_handler( unsigned(-1) /*handle all event groups*/ ) {}

В обработчике OnCreate обязательно вызываем указанные ниже функции, это нужно чтоб наш view имел обработчик для событий и чтоб view принимал все нотификации от HTMLayout:

LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, 
      LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
DefWindowProc();
 
// HTMLayout stuff
SetCallback(); // reroute all notifications here
SetEventHandler(this); // set this as a "zero level" event handler, all
...

и так далее, в HTMLayout SDK есть отличный пример на WTL, называется “Browse” – в нем можно посмотреть как обрабатываются сами события внутре view (см. htmlview.h).
Также с помощью этого собранного примера можно тестить свои шаблончики на HTML+CSS.
Еще деталь, чтоб работали так называемые behaviors необходимо добавлять соответствующий behavior-файл в проект (например мне для табов пришлось добавить файлик behavior_tabs.cpp из каталога include/behaviors в HTMLayout SDK и только после этого табы из примеров заработали)