source: dev/trunk/ab5.0/abdev/abdev/CIEsink.h @ 489

Last change on this file since 489 was 489, checked in by dai_9181, 15 years ago

abdevをATL化するための下準備

File size: 1.7 KB
Line 
1#include <atlbase.h>    // ATL基本機能用ヘッダファイル
2#include <atlcom.h>     // ATL COM共通用ヘッダファイル
3#include <atlhost.h>    // ATL コンテナ機能サポート用ヘッダファイル
4#include <EXDISPID.H>
5
6// 数字は任意。詳しくはIDispatchImplのドキュメント参照
7#define SINKID_COUNTEREVENTS 0
8
9/* CIESink : シンク(イベント受付窓口)クラス */
10class ATL_NO_VTABLE CIESink :
11    public CComObjectRootEx<CComSingleThreadModel>,
12    public IDispEventImpl<SINKID_COUNTEREVENTS, CIESink, &DIID_DWebBrowserEvents2>
13{
14private:
15    CComPtr<IUnknown> m_pUnkIE;
16
17public:
18    CIESink() {}
19
20    HRESULT AdviseToIE( CComPtr<IUnknown> pUnkIE)
21    {
22        m_pUnkIE = pUnkIE;
23       
24        // タイプ ライブラリへのポインタやバージョン情報の設定
25        AtlGetObjectSourceInterface( pUnkIE, &m_libid, &m_iid, &m_wMajorVerNum, &m_wMinorVerNum) ;
26
27        // イベントをDispatch
28        HRESULT hr = this->DispEventAdvise( pUnkIE);
29
30        return hr ;
31    }
32
33BEGIN_COM_MAP(CIESink)
34    COM_INTERFACE_ENTRY_IID(DIID_DWebBrowserEvents2, CIESink)
35END_COM_MAP()
36
37BEGIN_SINK_MAP(CIESink)
38    SINK_ENTRY_EX(SINKID_COUNTEREVENTS, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, &CIESink::OnBeforeNavigate2)
39    SINK_ENTRY_EX(SINKID_COUNTEREVENTS, DIID_DWebBrowserEvents2, DISPID_NEWWINDOW2, &CIESink::OnNewWindow2)
40    SINK_ENTRY_EX(SINKID_COUNTEREVENTS, DIID_DWebBrowserEvents2, DISPID_ONQUIT, &CIESink::OnQuit)
41END_SINK_MAP()
42
43// OnBeforeNavigate2
44void _stdcall OnBeforeNavigate2( IDispatch** ppDisp, VARIANT* pvUrl, VARIANT*, VARIANT* pvTarget, VARIANT*,
45                   VARIANT*, VARIANT_BOOL *pbCancel)
46{
47    return ;
48}
49
50// OnNewWindow2
51void _stdcall OnNewWindow2( IDispatch** ppDisp, VARIANT_BOOL *pbCancel)
52{
53    return ;
54}
55
56// OnQuit
57void _stdcall OnQuit()
58{
59    DispEventUnadvise( m_pUnkIE);
60    return ;
61}
62};
63
64
Note: See TracBrowser for help on using the repository browser.