第19回 タブを切り替えたときにアドレスバーのURL表示を更新する (タブブラウザーを作る)

tabbrowser70.gif
前回はアドレスバーにアクティブなタブで読み込まれたホームページのURLが自動で表示されるようにした。しかしタブを切り替えたときにアドレスバーのURL表示が変わらないという問題があった。今回はその点を修正する。

WTLのCTabViewではタブが切り替わったとき、親ウインドウにTBVN_PAGEACTIVATEDという通知が届く。これを処理してアドエスバーを更新する。MainFrm.h内にTBVN_PAGEACTIVATEDのハンドラと処理を実装する。
	BEGIN_MSG_MAP(CMainFrame)
		MESSAGE_HANDLER(WM_DNP_CREATENEWTAB, OnDnpCreateNewTab)
		MESSAGE_HANDLER(WM_DNP_CHANGEFOCUS, OnDnpChangeFocus)
		MESSAGE_HANDLER(WM_DNP_CHANGEADDRESS, OnDnpChangeAddress)
		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)
		COMMAND_ID_HANDLER(ID_IE_ADDFAVORITE, OnIEAddFavorite)
		COMMAND_ID_HANDLER(ID_IE_ORGANIZE_FAVORITE, OnIEOrganizeFavorite)
		NOTIFY_CODE_HANDLER(TBVN_CONTEXTMENU, OnTabContextMenu)
		NOTIFY_CODE_HANDLER(TBVN_PAGEACTIVATED, OnTabPageActivated)		//■追加
		MESSAGE_HANDLER(WM_MENUSELECT, OnMenuSelect)
		COMMAND_RANGE_HANDLER(ID_FAVORITE_FIRST,ID_FAVORITE_LAST,OnFavorite)
		CHAIN_MSG_MAP_MEMBER(_cFovMenu)
		CHAIN_MSG_MAP(CUpdateUI<CMainFrame>)
		CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>)
	END_MSG_MAP()



	//■追加
	//タブが選択されたときの処理
	LRESULT OnTabPageActivated(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
	{
		if(pnmh == NULL)
			return	0;

		bool		ret;
		CAtlString	strURL;
		CTabBrowser100View*	pView;

		pView = GetActivePageView();		//アクティブビュー取得
		if(pView == NULL)
			return	0;

		ret = pView->GetURL(strURL);		//URL取得
		if(ret == false)
			return	0;

		//アドレスバーのURL変更
		_wndAddressBar.SetWindowText(strURL);

		return	0;
	}

tabbrowser71.gif 次にIEUtility.hに現在のURLを取得するための関数を追加する。
	//■追加
	bool	GetURL(CAtlString& strURL)
	{
		HRESULT		hr;
		CComBSTR	bstr;

		strURL = _T("");
		if(_pIWebBrowser2 == NULL)
			return	false;

		hr = _pIWebBrowser2->get_LocationURL(&bstr);
		if(FAILED(hr))
			return	false;

		strURL = bstr;

		return	true;
	}

tabbrowser72.gif
これでビルド/実行するとタブを切り替えたときにもきちんとアドレスバーにそのタブで開いているページのURLが表示されるようになった。

まだまだアドレスバーで修正しなければいけない点が残っているがとりあえず保留して、次回はタブブラウザーが起動するときに前回閉じた位置で開くように設定する。

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


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