![]()
Internet Explorerではステータスバーに「ページが表示されました」などのメッセージが表示される。この文字列はIEコントロールのイベントDISPID_STATUSTEXTCHANGEで受信できる。今回はこれを利用してステータスバーにメッセージを表示する。
ステータスバーメッセージ表示機能の実装はアドレスバーに開かれているページのURLを表示したのと基本的に同じ流れだ。
まず「stdafx.h」にメインウインドウへメッセージが変更されたことを知らせる独自メッセージを定義する。#define WM_DNP_CHANGESTATUSTEXT (WM_APP + 4) //■追加
CAtlString _strLastStatusText; //■追加 最後に送られてきたステータステキストを保管
void __stdcall OnStatusTextChange(BSTR bstrText)
{
//■処理を実装
_strLastStatusText = bstrText; //いつでも参照できるようにクラスのメンバーに保存しておく
if(_pTabView == NULL || _pTabView->GetActivePage() != _pTabView->PageIndexFromHwnd(m_hWnd))
return; //このビューがアクティブでなければこれ以降処理しない
//メインウインドウに変更を通知する
GetTopLevelWindow().SendMessage(WM_DNP_CHANGESTATUSTEXT,(WPARAM)(LPCTSTR)_strLastStatusText);
}
//■追加
//最後にIEコントロールから受け取ったステータスバー用メッセージを返す
void GetLastStatusText(CAtlString& strText)
{
strText = _strLastStatusText;
}
BEGIN_MSG_MAP(CMainFrame)
MESSAGE_HANDLER(WM_DNP_CREATENEWTAB, OnDnpCreateNewTab)
MESSAGE_HANDLER(WM_DNP_CHANGEFOCUS, OnDnpChangeFocus)
MESSAGE_HANDLER(WM_DNP_CHANGEADDRESS, OnDnpChangeAddress)
MESSAGE_HANDLER(WM_DNP_CHANGESTATUSTEXT, OnDnpChangeStatusText) //■追加
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()
//■追加
//ステータスバーの表示テキストの変更処理
//アクティブなタブのIEでステータスバーのテキストが変わったときにメッセージが届く
LRESULT OnDnpChangeStatusText(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
LPCTSTR pszText = (LPCTSTR)wParam;
if(pszText == NULL)
return 0;
if(::IsWindow(m_hWndStatusBar))
::SetWindowText(m_hWndStatusBar,pszText);
return 0;
}
//■処理を変更/追加
//タブが選択されたときの処理
LRESULT OnTabPageActivated(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
{
if(pnmh == NULL)
return 0;
bool ret;
CTabBrowser100View* pView;
pView = GetActivePageView(); //アクティブビュー取得
if(pView == NULL)
return 0;
//アドレスバーのURL変更
{
CAtlString strURL;
ret = pView->GetURL(strURL); //URL取得
if(ret)
_wndAddressBar.SetWindowText(strURL);
}
//ステータスバーのテキスト変更
{
CAtlString strText;
pView->GetLastStatusText(strText);
if(::IsWindow(m_hWndStatusBar))
::SetWindowText(m_hWndStatusBar,strText);
}
return 0;
}
![]()
これでビルド/実行するとステータスバーにIEコントロールからのメッセージが表示されるようになった。
次回はダウンロード状況などがわかるようにステータスバーにプログレスバーを配置する。
