第31回 アドレスバーでキーボードショートカットが使えるようにする (タブブラウザーを作る)

tabbrowser124.gif
今までアドレスバー内で、[Ctrl]+[V]などのキーボードによる操作ができなかったり、横幅以上のサイズのURLが入力できないなどの致命的な問題点があった。今回はそれらを修正する。

まずはアドレスバーでキーボードショートカットが利用できない点。これはアクセラレーターが設定されているためで、その処理はCFrameWindowImpl<CMainFrame>::PreTranslateMessageで行われている(むしろそこではその処理しかしていない)。そのためアドレスバー内にフォーカスがある場合はCFrameWindowImpl<CMainFrame>::PreTranslateMessageが実行されないようにする。
	virtual BOOL PreTranslateMessage(MSG* pMsg)
	{
		if(_wndAddressBar.IsChild(::GetFocus()) == FALSE)		//■追加 アドレスバーにフォーカスがあるときはPreTranslateMessageを回さない(アドレスバーでCtrl+Cなどを使えるようにするため)
		{
			if(CFrameWindowImpl<CMainFrame>::PreTranslateMessage(pMsg))
				return TRUE;
		}

		return m_view.PreTranslateMessage(pMsg);
	}

tabbrowser125.gif
次に長い文字列を入力できない点。これは使っているコンボボックスにCBS_AUTOHSCROLLスタイルを設定していなかったためだ。ちなみにエディットコントロールの場合はES_AUTOHSCROLLスタイルを指定する。

また今回は外見に3D境界線をつける拡張スタイルのWS_EX_CLIENTEDGEなども追加しておいた。
		//■スタイル変更
		_wndAddressBar.Create(m_hWnd,CRect(0,0,200,200),0,WS_CHILD | WS_VISIBLE | CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_CLIPCHILDREN,WS_EX_CLIENTEDGE);

tabbrowser126.gif
これでビルド/実行するとアドレスバーでの上記2つの問題を修正できた。

次回はステータスバーにアイコンを表示する。

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


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