第61回 CAxHostWindowのInvokeを上書きする (タブブラウザーを作る)

tabbrowser281.gif
今回は画像表示やスクリプト実行のON/OFFなどを制御するダウンロードコントロールが正常に働くようにする。

とはいうものの前回の作業でほとんどの部分が実装されているのでInvokeを上書きするだけでいい。
	//■追加
	STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
			VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
	{
		HRESULT	hr = E_FAIL;
		CComPtr<IDispatch>	pIDispatch;

		//ダウンロードコントロール用のInvoke
		if(_pIAmbientControl)
			_pIAmbientControl->QueryInterface(&pIDispatch);
		if(pIDispatch)
			hr = pIDispatch->Invoke(dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
		if(SUCCEEDED(hr))
			return	hr;

		//IEコントロールのイベント用のInvoke
		hr = IDispEventImpl<SINKID_EVENTS, CTabBrowser100View, &DIID_DWebBrowserEvents2>::Invoke(dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
		if(SUCCEEDED(hr))
			return	hr;

		//デフォルト(CAxHostWindow)用のInvoke
		return CComObject<CAxHostWindow>::Invoke(dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
	}

tabbrowser283.gif これは関係ないが、IEツールバーホスト用のクラスの中のフォーカス変更処理は前回の作業で不要になったので削除する。
	//IInputObjectSite
	STDMETHOD(OnFocusChangeIS)(IUnknown *punkObj,BOOL fSetFocus)
	{
		//■内部処理削除
		//HRESULT	hr = E_FAIL;
		//CComPtr<IOleInPlaceObject> pIOleInPlaceObject;

		//if(_pIDispatch)
		//	_pIDispatch->QueryInterface(&pIOleInPlaceObject);
		//if(pIOleInPlaceObject == NULL)
		//	return	S_OK;

		//if(fSetFocus)
		//{
		//	hr = pIOleInPlaceObject->UIDeactivate();
		//	pIOleInPlaceObject->InPlaceDeactivate();
		//}
		//else
		//{
		//	HWND hWnd;
		//	hr = pIOleInPlaceObject->GetWindow(&hWnd);
		//	if(SUCCEEDED(hr) && ::IsWindow(hWnd))
		//		::ShowWindow(hWnd,SW_NORMAL);
		//}

		return	S_OK;
	}

tabbrowser282.gif
これでビルド/実行すると画像表示のON/OFFなどのダウンロード関連機能が再び使えるようになった。

次回は「お気に入り」メニューに「お気に入りの整理」などのメニュー項目を追加する。

プロジェクトファイルをダウンロード


カテゴリー「タブブラウザーを作る」 のエントリー