第2回 アドレスバーを作る(その1) (タブブラウザーを作る)

tabbrowser06.gif
前回はタブブラウザーのひな形となるプロジェクトをATL/WTLプロジェクトウイザードにより自動生成した。今回はURLを手入力するための「アドレスバー」をウインドウに追加する。

前回のプロジェクトを開き、ソリューションウインドウにある「MainFrm.h」をダブルクリックして編集画面を開く。
そして、「MainFrm.h」にincludeファイル用の定義とアドレスバーとなるコンボボックスのメンバー変数を追加する。

#define WINDOW_MENU_POSITION	3

#include "atlmisc.h"					//■追加
#include "atlstr.h"						//■追加

class CMainFrame : public CFrameWindowImpl<CMainFrame>, public CUpdateUI<CMainFrame>,
		public CMessageFilter, public CIdleHandler
{
	CComboBoxEx	_wndAddressBar;			//■追加 アドレスバー用コンボボックス

public:
	DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME)

tabbrowser07.gif 次に同じ「MainFrm.h」内にアドレスバー内で[Enter]キーが押されたことを検出して処理するためにメッセージマップにハンドラを追加し、対応した処理用の関数を追加する。 ここではコンボボックス編集終了の通知を示すWM_NOTIFYのCBEN_ENDEDITをとらえ、コンボボックスに入力されている文字をメッセージボックスに出力する処理を実装した(入力されたURLをブラウザで実際に開く処理は次回実装する)。
	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)
		CHAIN_MSG_MAP(CUpdateUI<CMainFrame>)
		CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>)
	END_MSG_MAP()


	//■関数追加
	//アドレスバーで[ENTER]キーが押されたときなどに呼ばれる
	LRESULT OnAddressbarEnter(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
	{
		bHandled = FALSE;

		NMCBEENDEDIT*	pNmCbEndEdit = (NMCBEENDEDIT*)pnmh;
		CAtlString		strURL;

		if(pNmCbEndEdit == NULL || pNmCbEndEdit->iWhy != CBENF_RETURN)
			return	0;			//[ENTER]キーが押されたとき以外はreturn

		_wndAddressBar.GetWindowText(strURL);
		if(strURL == _T(""))
			return	0;		//URLが入力されてなかった

		MessageBox(strURL);	//とりあえず入力されたURLをメッセージボックスで表示する

		return	0;
	}

tabbrowser08.gif 最後に同じく「MainFrm.h」のOnCreate()内にアドレスバーとなるコンボボッククスを生成してツールバーに配置するコードを追加する。ここではコンボボックスのスタイルをドロップダウン式のCBS_DROPDOWNを指定した。
		_wndAddressBar.Create(m_hWnd,CRect(0,0,200,200),0,WS_CHILD | WS_VISIBLE | CBS_DROPDOWN);	//■追加
		AddSimpleReBarBand(_wndAddressBar);											//■追加

tabbrowser09.gif
以上の追加をしてビルド/実行するとツールバーにアドレスバーとなるコンボボックスが配置された。そして文字を入力して[Enter]キーを押すとメッセージボックスとして出力できた。

次回はこのアドレスバーに入力された文字列(URL)をビューで開く実装をする。

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


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