第6回 タブブラウザーに「戻る」や「進む」ボタンを配置する (タブブラウザーを作る)

tabbrowser21.gif
前回までにアドレスバーの実装やリンクを新しいタブで開く機能の実装などにより、タブブラウザーとしてそれらしく動作するようになってきた。今回は「戻る」「進む」「更新」「中止」ボタンをツールバーに作る。

前回までに作成したプロジェクトを開く。まずはツールバーにボタンを追加するため、リソースビューの「Toolbar」にある「IDR_MAINFRAME」をダブルクリックしてツールバーリソースを開いて、ボタンを4つ追加する。

tabbrowser22.gif
さらに「プロパティ」ウインドウを開き、新しく作成したボタンのIDを設定する。ここでは
「戻る」ボタンは「ID_IE_BACK」
「進む」ボタンは「ID_IE_NEXT」
「中止」ボタンは「ID_IE_STOP」
「更新」ボタンは「ID_IE_REFRESH」
とした。これでツールバーリソースに関する設定は終わりだ。

tabbrowser23.gif 次にソースコードを編集する。ソリューションウインドウで「TabBrowser100View.h」をダブルクリックしてビュークラスの編集画面を開く。そしてここにIWebBrowser2::GoBack()を呼びだして「戻る」ための関数などを追加する。
	//■追加
	void	Back(void)
	{
		if(_pIWebBrowser2)
			_pIWebBrowser2->GoBack();
	}

	//■追加
	void	Next(void)
	{
		if(_pIWebBrowser2)
			_pIWebBrowser2->GoForward();
	}

	//■追加
	void	Stop(void)
	{
		if(_pIWebBrowser2)
			_pIWebBrowser2->Stop();
	}

	//■追加
	void	Refresh(void)
	{
		if(_pIWebBrowser2)
			_pIWebBrowser2->Refresh2(&CComVariant(REFRESH_COMPLETELY));
	}

tabbrowser24.gif 次に「MainFrm.h」を開き、ツールバーのボタンが押されたときに実行されるメッセージハンドラを追加する。通常のMDIであればFrame -> Viewの順にWM_COMMANDが届くためメッセージハンドらを直接ビューに書くが、CTabViewになっているため直接ビューには届かないため今回はMainFrm.h内に実装した。
	BEGIN_MSG_MAP(CMainFrame)
		NOTIFY_CODE_HANDLER(CBEN_ENDEDIT, OnAddressbarEnter)
		MESSAGE_HANDLER(WM_CREATE, OnCreate)
		MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
		COMMAND_ID_HANDLER(ID_APP_EXIT, OnFileExit)
		COMMAND_ID_HANDLER(ID_FILE_NEW, OnFileNew)
		COMMAND_ID_HANDLER(ID_VIEW_TOOLBAR, OnViewToolBar)
		COMMAND_ID_HANDLER(ID_VIEW_STATUS_BAR, OnViewStatusBar)
		COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
		COMMAND_ID_HANDLER(ID_WINDOW_CLOSE, OnWindowClose)
		COMMAND_ID_HANDLER(ID_WINDOW_CLOSE_ALL, OnWindowCloseAll)
		COMMAND_RANGE_HANDLER(ID_WINDOW_TABFIRST, ID_WINDOW_TABLAST, OnWindowActivate)
		COMMAND_ID_HANDLER(ID_IE_BACK, OnIECommand)			//■追加
		COMMAND_ID_HANDLER(ID_IE_NEXT, OnIECommand)			//■追加
		COMMAND_ID_HANDLER(ID_IE_STOP, OnIECommand)			//■追加
		COMMAND_ID_HANDLER(ID_IE_REFRESH, OnIECommand)		//■追加
		CHAIN_MSG_MAP(CUpdateUI<CMainFrame>)
		CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>)
	END_MSG_MAP()


	//■追加
	//「戻る」「進む」などのIEコマンド処理
	LRESULT OnIECommand(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
	{
		int		nPage;
		CTabBrowser100View*	pView;

		nPage = m_view.GetActivePage();
		if(nPage < 0)
			return	0;		//アクティブなタブがない

		pView = (CTabBrowser100View*)m_view.GetPageData(nPage);
		if(pView == NULL)
			return	0;		//ビューが取得できなかった

		switch(wID)
		{
		case	ID_IE_BACK:	//戻る
			pView->Back();
			break;

		case	ID_IE_NEXT:	//進む
			pView->Next();
			break;

		case	ID_IE_STOP:	//ストップ
			pView->Stop();
			break;

		case	ID_IE_REFRESH:	//更新
			pView->Refresh();
			break;
		}

		return	0;
	}

tabbrowser25.gif
これでビルド/実行すると、ツールバーに「戻る」や「進む」などのボタンが現れ、実際に「戻る」などの操作ができた。

今回作成した「戻る」「進む」ボタンは常に押せる状態にある。次回はIEコントロールから履歴を取り出して、「戻る」ことができるときだけ「戻る」ボタンを有効になるようにする。

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


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