Некоторое время назад я переделал MFC-шный класс под WTL,
может, кому пригодится.
Вот пример использования моего класса:
#include "../wtl_gui/HtmlDialogImpl.h"
class CAboutDlg: public CHtmlDialogImpl<CAboutDlg>
{
public:
CString m_sText;
public:
CAboutDlg(): CHtmlDialogImpl<CAboutDlg>(IDR_HTML_ABOUT, CRect(0, 0, 293, 200))
{
}
public:
BEGIN_MSG_MAP(CAboutDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(IDOK, OnCloseCmd)
COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd)
CHAIN_MSG_MAP(CHtmlDialogImpl<CAboutDlg>)
END_MSG_MAP()
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
CHtmlDialogImpl<CAboutDlg>::OnInitDialog(uMsg, wParam, lParam, bHandled);
// Не показываем скроллбары и 3dborder
SetHostFlags(DOCHOSTUIFLAG_NO3DBORDER | DOCHOSTUIFLAG_SCROLL_NO);
// Показывать картинки независимо от настроек IE
SetDlControlFlags(DLCTL_DLIMAGES);
return TRUE;
}
LRESULT OnCloseCmd(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
EndDialog(wID);
return 0;
}
public:
BEGIN_DHTML_DDX_MAP(CAboutDlg)
DDX_DHtml_ElementValue(_T("txtText"), m_sText)
END_DHTML_DDX_MAP()
BEGIN_DHTML_EVENT_MAP(CAboutDlg)
DHTML_EVENT_ONCLICK(_T("lnkCheckUpdate"), OnCheckUpdate)
DHTML_EVENT_ELEMENT(DISPID_HTMLELEMENTEVENTS_ONCLICK, _T("btnBrowse"), OnBrowse)
END_DHTML_EVENT_MAP()
HRESULT OnBrowse(IHTMLElement *phtmlElement)
{
DoDataExchange(TRUE);
MessageBox(m_sText);
return S_OK;
}
HRESULT OnCheckUpdate(IHTMLElement *phtmlElement)
{
return S_FALSE;
}
//-----------------------------------------------------------------------------
// overridables
STDMETHODIMP ShowContextMenu(DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved)
{
// Здесь можно вывести своё контекстное меню
return S_OK;
}
};
Пример страницы (записана как HTML ресурс IDR_HTML_ABOUT):
<html>>
<body>>
<A id="lnkCheckUpdate" href="about:blank" accesskey="U">Check Update</A>
<br>>
<input type="text" id="txtText" value="Text"/>
<br>>
<input type="button" id="btnBrowse" value="Browse"/>
</body>
</html>
S>
Код класса можно взять
здесь
Любые замечания приветствуются, но сильно не пинайте

--
Алексей