![]()
これまで起動直後などタブが1つもないときには「Googleツールバー」を表示するための領域(リバー)が空白のまま表示されていた。今回はタブがない場合にはリバーが表示されないようにする。
//■処理内容実装
class CDummyWnd : public CWindowImpl<CDummyWnd>
{
public:
UINT _nBandIndex; //rebar上のインデックス
CDummyWnd()
{
_nBandIndex = -1;
}
BEGIN_MSG_MAP(CDummyWnd)
MESSAGE_HANDLER(WM_DNP_GETRBINDEX, OnDnpRbIndex)
MESSAGE_HANDLER(WM_SIZE, OnSize)
END_MSG_MAP()
LRESULT OnDnpRbIndex(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
UINT* pnIndex = (UINT*)wParam;
if(pnIndex)
*pnIndex = _nBandIndex;
return 0;
}
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
bHandled = FALSE;
if(_nBandIndex == -1)
return 0;
//このウインドウの直下にあるchildウインドウ=IEツールバーをrebarに全体表示する
CRect rect;
HWND hWnd;
//rebarサイズ取得
rect.left = 0;
rect.top = 0;
rect.right = LOWORD(lParam);
rect.bottom = HIWORD(lParam);
//子ウインドウを検索してサイズ調節
hWnd = NULL;
while(1)
{
hWnd = ::FindWindowEx(m_hWnd,hWnd,NULL,NULL);
if(hWnd == NULL)
break;
::MoveWindow(hWnd,rect.left,rect.top,rect.Width(),rect.Height(),FALSE);
}
return 0;
}
bool ShowRebar(bool bVisible)
{
if(_nBandIndex == -1 || IsWindow() == FALSE)
return false;
::SendMessage(::GetParent(m_hWnd),RB_SHOWBAND,(WPARAM)_nBandIndex,(LPARAM)(bVisible ? TRUE : FALSE));
return true;
}
};
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
// コマンドバー ウィンドウの作成
HWND hWndCmdBar = m_CmdBar.Create(m_hWnd, rcDefault, NULL, ATL_SIMPLE_CMDBAR_PANE_STYLE);
// メニューのアタッチ
m_CmdBar.AttachMenu(GetMenu());
// コマンドバー画像の読み込み
m_CmdBar.LoadImages(IDR_MAINFRAME);
// 以前のメニューの削除
SetMenu(NULL);
HWND hWndToolBar = CreateSimpleToolBarCtrl(m_hWnd, IDR_MAINFRAME, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE);
CreateSimpleReBar(ATL_SIMPLE_REBAR_NOBORDER_STYLE);
AddSimpleReBarBand(hWndCmdBar);
AddSimpleReBarBand(hWndToolBar, NULL, TRUE);
_wndAddressBar.Create(m_hWnd,CRect(0,0,200,200),0,WS_CHILD | WS_VISIBLE | CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_CLIPCHILDREN,WS_EX_CLIENTEDGE);
AddSimpleReBarBand(_wndAddressBar,0,TRUE); //アドレスバーを1列で表示
//ダミーウインドウを生成し、リバーに割り当てる。これはIEツールバーに利用
//ここで生成してしまうと何もないリバーができてしまうが気にしない
_wndDummy.Create(m_hWnd,CRect(0,0,500,24),0,WS_CHILD);
AddSimpleReBarBand(_wndDummy,0,TRUE); //1行表示
//■追加
//IEツールバー用のrebarのインデックス取得。_wndDummyへ割り当てると同時にrebarを非表示に
{
UINT nCount;
nCount = (UINT)::SendMessage(m_hWndToolBar,RB_GETBANDCOUNT,NULL,NULL);
_wndDummy._nBandIndex = nCount - 1;
_wndDummy.ShowRebar(false); //非表示にする
}
CreateSimpleStatusBar();
m_hWndClient = m_view.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
UIAddToolBar(hWndToolBar);
UISetCheck(ID_VIEW_TOOLBAR, 1);
UISetCheck(ID_VIEW_STATUS_BAR, 1);
// メッセージ フィルターおよび画面更新用のオブジェクト登録
CMessageLoop* pLoop = _Module.GetMessageLoop();
ATLASSERT(pLoop != NULL);
pLoop->AddMessageFilter(this);
pLoop->AddIdleHandler(this);
CMenuHandle menuMain = m_CmdBar.GetMenu();
m_view.SetWindowMenu(menuMain.GetSubMenu(WINDOW_MENU_POSITION));
_cTabImageList.Create(16,16,ILC_COLOR | ILC_MASK,1,10);
m_view.SetImageList(_cTabImageList);
return 0;
}
//タブが選択されたときの処理
LRESULT OnTabPageActivated(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
{
if(pnmh == NULL)
return 0;
//全てのビューに対してタブ変更があったことを通知
{
int i;
int nCount;
CTabBrowser100View* pView;
nCount = m_view.GetPageCount();
for(i = 0; i < nCount; i++)
{
pView = GetPageView(i);
if(pView == NULL)
continue;
if(pnmh->idFrom == i)
pView->OnTabPageChange(true);
else
{
pView->OnTabPageChange(false);
pView->SetStatusBar(m_hWndStatusBar,false); //ステータスバー解放
}
}
pView = GetActivePageView();
if(pView)
pView->SetStatusBar(m_hWndStatusBar,true); //ステータスバーセット
}
bool ret;
CTabBrowser100View* pView;
pView = GetActivePageView(); //アクティブビュー取得
if(pView == NULL)
{
_wndDummy.ShowRebar(false); //■追加 リバー消去
return 0;
}
_wndDummy.ShowRebar(true); //■追加 リバー表示
//アドレスバーのURL変更
{
CAtlString strURL;
ret = pView->GetURL(strURL); //URL取得
if(ret)
_wndAddressBar.SetWindowText(strURL);
}
return 0;
}
#define WM_DNP_CHANGEFOCUS (WM_APP + 1) #define WM_DNP_CREATENEWTAB (WM_APP + 2) #define WM_DNP_CHANGEADDRESS (WM_APP + 3) #define WM_DNP_SCRIPTERROR (WM_APP + 6) #define WM_DNP_SHOWSCRIPTERROR (WM_APP + 7) #define WM_DNP_SHOWPRIVACYREPORT (WM_APP + 8) #define WM_DNP_SHOWPSECURITYREPORT (WM_APP + 9) #define WM_DNP_SHOWZONECONFIGURE (WM_APP + 10) #define WM_DNP_GETRBINDEX (WM_APP + 11) //■追加
![]()
これでタブがないときには「Googleツールバー」用のリバーが表示されなくなった。
次回はGoogleツールバーの下端が切れる問題とページ上でキー入力ができなくなるバグを修正する。
