![]()
前回はタブブラウザーのひな形となるプロジェクトを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)
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;
}
_wndAddressBar.Create(m_hWnd,CRect(0,0,200,200),0,WS_CHILD | WS_VISIBLE | CBS_DROPDOWN); //■追加 AddSimpleReBarBand(_wndAddressBar); //■追加
![]()
以上の追加をしてビルド/実行するとツールバーにアドレスバーとなるコンボボックスが配置された。そして文字を入力して[Enter]キーを押すとメッセージボックスとして出力できた。
次回はこのアドレスバーに入力された文字列(URL)をビューで開く実装をする。
