###作成しようとしていること
Visual Studio 2013 で、HTMLに埋め込むための、MFCによるActiveX(MFC ActiveX コントロール プロジェクト)を作成しています。ちなみに、.NET(共通言語ランタイム)サポートを ON(/clr スイッチ)にしています。
###疑問
HTMLに埋め込んでブラウザ(Internet Explorer 11)から呼び出されるとき、ActiveXを格納しているHTMLのURLを知りたい(相対パスで指定されるアドレスを絶対アドレスに変換しなければならないことが理由)ため、コントロールのクラス(COleControlの派生クラス)のSetClientSiteをオーバーライドしてみたつもりなのですが、呼ばれません。
https://support.microsoft.com/ja-jp/kb/181678
C++
1//////////////////////////////////////////////////////////// 2// SampleCtrl.h 3 4class CSampleCtrl: public COleControl 5{ 6 DECLARE_DYNCREATE(CSampleCtrl) 7 8// コンストラクター 9public: 10 CSampleCtrl(); 11 12// オーバーライド 13public: 14 virtual void OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid); 15 virtual BOOL PreCreateWindow(CREATESTRUCT& cs); 16 virtual void DoPropExchange(CPropExchange* pPX); 17 virtual void OnResetState(); 18 virtual DWORD GetControlFlags(); 19 STDMETHOD(SetClientSite)(LPOLECLIENTSITE); // <------ これを追加 20 21// 実装 22protected: 23 ~COpoTiffCtrl(); 24// 以下略 25} 26 27//////////////////////////////////////////////////////////// 28// SampleCtrl.cpp 29 30HRESULT STDMETHODCALLTYPE CSampleCtrl::SetClientSite 31( 32 IOleClientSite *pClientSite //Pointer to an embedded object's client site. 33) 34{ 35 MessageBox(_T("SetClientSiteが呼ばれました")); 36 //HRESULT hrRet = IOleObjectImpl::SetClientSite(pClientSite); // IOleObjectImplが未定義と怒られる。IOleObjectとすると静的メンバーはだめと怒られる。 37 return S_OK; 38} 39
###質問
オーバーライドの方法が間違えているのでしょうか?呼ばれない原因はどこにあるでしょうか?
C++文法の基礎的な誤りかもしれませんが、ご指摘・ご教示のほどお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。