#include // ATL基本機能用ヘッダファイル #include // ATL COM共通用ヘッダファイル #include // ATL コンテナ機能サポート用ヘッダファイル #include // 数字は任意。詳しくはIDispatchImplのドキュメント参照 #define SINKID_COUNTEREVENTS 0 /* CIESink : シンク(イベント受付窓口)クラス */ class ATL_NO_VTABLE CIESink : public CComObjectRootEx, public IDispEventImpl { private: CComPtr m_pUnkIE; public: CIESink() {} HRESULT AdviseToIE( CComPtr pUnkIE) { m_pUnkIE = pUnkIE; // タイプ ライブラリへのポインタやバージョン情報の設定 AtlGetObjectSourceInterface( pUnkIE, &m_libid, &m_iid, &m_wMajorVerNum, &m_wMinorVerNum) ; // イベントをDispatch HRESULT hr = this->DispEventAdvise( pUnkIE); return hr ; } BEGIN_COM_MAP(CIESink) COM_INTERFACE_ENTRY_IID(DIID_DWebBrowserEvents2, CIESink) END_COM_MAP() BEGIN_SINK_MAP(CIESink) SINK_ENTRY_EX(SINKID_COUNTEREVENTS, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, &CIESink::OnBeforeNavigate2) SINK_ENTRY_EX(SINKID_COUNTEREVENTS, DIID_DWebBrowserEvents2, DISPID_NEWWINDOW2, &CIESink::OnNewWindow2) SINK_ENTRY_EX(SINKID_COUNTEREVENTS, DIID_DWebBrowserEvents2, DISPID_ONQUIT, &CIESink::OnQuit) END_SINK_MAP() // OnBeforeNavigate2 void _stdcall OnBeforeNavigate2( IDispatch** ppDisp, VARIANT* pvUrl, VARIANT*, VARIANT* pvTarget, VARIANT*, VARIANT*, VARIANT_BOOL *pbCancel) { return ; } // OnNewWindow2 void _stdcall OnNewWindow2( IDispatch** ppDisp, VARIANT_BOOL *pbCancel) { return ; } // OnQuit void _stdcall OnQuit() { DispEventUnadvise( m_pUnkIE); return ; } };