第7回 IEコントロールの履歴を調べて「戻る」の状態を切り替える (タブブラウザーを作る)

tabbrowser26.gif
前回までにWTLのタブビューをひな形にアドレスバーや「戻る」「進む」ボタンなどを実装することでだんだんタブブラウザが形になってきた。

今回はIEコントロールから履歴情報を取り出して、「戻る」「進む」ボタンの有効/無効を自動的に切り換える処理を追加する。

前回までに作成したプロジェクトのソリューションウインドウにある「TabBrowser100View.h」をダブルクリックしてビュークラスの編集画面を開く。

IEコントロールからの履歴取得はITravelLogStgを利用する。そのためのinclude定義を追加する。
#include "tlogstg.h"		//■追加 IE5.5以上

tabbrowser27.gif 次に同じビュークラスの中にIEコントロールの履歴があるかどうかを返す関数を追加する。 ここれでは履歴が1つ以上あればbBackやbNextをtrueにすることで履歴情報を返している。
	//■追加
	//「戻る」や「進む」ための履歴がIEにあるかどうかのチェック
	bool	IsButtonEnable(bool& bBack,bool& bNext)
	{
		HRESULT	hr;
		DWORD	dwCount;

		CComPtr<ITravelLogStg>			pITravelLogStg;
		CComPtr<IServiceProvider>		pIServiceProvider;

		bBack = false;
		bNext = false;

		if(_pIWebBrowser2)
			_pIWebBrowser2->QueryInterface(&pIServiceProvider);
		if(pIServiceProvider)
			pIServiceProvider->QueryService(SID_STravelLogCursor,IID_ITravelLogStg,(void**)&pITravelLogStg);
		if(pITravelLogStg == NULL)
			return	false;

		hr = pITravelLogStg->GetCount(TLEF_RELATIVE_BACK,&dwCount);
		if(dwCount)
			bBack = true;
		if(FAILED(hr))
			return	false;

		hr = pITravelLogStg->GetCount(TLEF_RELATIVE_FORE,&dwCount);
		if(FAILED(hr))
			return	false;
		if(dwCount)
			bNext = true;

		return	true;
	}

tabbrowser28.gif
次に「MainFrm.h」を開き、ツールバーのボタン状態の有効/無効を、ビュークラスに実装したIsButtonEnableの結果をみて切りかえる処理を実装する。

本来であればIEコントロールがURLを読み込んだことを検出してボタン情報を切り替えた方が効率がいい。しかしここでは実装を簡単にするため、アイドル処理のためのOnIdle()でボタンの有効/無効を切り替えることにした。
	virtual BOOL OnIdle()
	{
		//■追加
		//「戻る」「進む」ボタンの状態設定
		{
			bool	ret;
			int		nPage;
			CTabBrowser100View*	pView = NULL;

			ret = false;
			nPage = m_view.GetActivePage();
			if(nPage >= 0)
				pView = (CTabBrowser100View*)m_view.GetPageData(nPage);
			if(pView)
			{
				bool	bBack;
				bool	bNext;

				ret = pView->IsButtonEnable(bBack,bNext);
				if(ret)
				{
					UIEnable(ID_IE_BACK,bBack ? TRUE : FALSE);
					UIEnable(ID_IE_NEXT,bNext ? TRUE : FALSE);
				}
			}
			if(ret == false)
			{
				UIEnable(ID_IE_BACK,FALSE);
				UIEnable(ID_IE_NEXT,FALSE);
			}
		}

		UIUpdateToolBar();
		return FALSE;
	}

	BEGIN_UPDATE_UI_MAP(CMainFrame)
		UPDATE_ELEMENT(ID_VIEW_TOOLBAR, UPDUI_MENUPOPUP)
		UPDATE_ELEMENT(ID_VIEW_STATUS_BAR, UPDUI_MENUPOPUP)
		UPDATE_ELEMENT(ID_IE_BACK, UPDUI_TOOLBAR)			//■追加
		UPDATE_ELEMENT(ID_IE_NEXT, UPDUI_TOOLBAR)			//■追加
	END_UPDATE_UI_MAP()

tabbrowser29.gif
これでビルド/実行すると、「戻る」と「進む」ボタンの有効/無効が自動的に切り替わるようになった。

次回は今まで保留していたアドレスバーで[BackSpace]キーなどが使えない点を修正する。

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


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