WTL: Аналог MFC-шного CDHtmlDialog
От: stone Канада  
Дата: 10.12.03 12:29
Оценка: 6 (2)
Некоторое время назад я переделал 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>


Код класса можно взять здесь
Любые замечания приветствуются, но сильно не пинайте
--
Алексей
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.