第7回 IEコントロールの履歴を調べて「戻る」の状態を切り替える (タブブラウザーを作る)
![]()
前回までにWTLのタブビューをひな形にアドレスバーや「戻る」「進む」ボタンなどを実装することでだんだんタブブラウザが形になってきた。
今回はIEコントロールから履歴情報を取り出して、「戻る」「進む」ボタンの有効/無効を自動的に切り換える処理を追加する。
前回までに作成したプロジェクトのソリューションウインドウにある「TabBrowser100View.h」をダブルクリックしてビュークラスの編集画面を開く。
IEコントロールからの履歴取得はITravelLogStgを利用する。そのためのinclude定義を追加する。#include "tlogstg.h" //■追加 IE5.5以上
//■追加
//「戻る」や「進む」ための履歴が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;
}
![]()
次に「MainFrm.h」を開き、ツールバーのボタン状態の有効/無効を、ビュークラスに実装したIsButtonEnableの結果をみて切りかえる処理を実装する。
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()
![]()
これでビルド/実行すると、「戻る」と「進む」ボタンの有効/無効が自動的に切り替わるようになった。
次回は今まで保留していたアドレスバーで[BackSpace]キーなどが使えない点を修正する。


