KumaBarBand.cpp
// KumaBarBand.cpp : CKumaBarBand の実装
#include "stdafx.h"
#include "KumaBarBand.h"
#include <tlogstg.h>
// CKumaBarBand
CKumaBarBand::CKumaBarBand()
{
}
CKumaBarBand::~CKumaBarBand()
{
if ( IsWindow() )
DestroyWindow();
}
// CWindowImpl
LRESULT CKumaBarBand::OnCreate(UINT /* uMsg */, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& /* bHandled */)
{
//ツールバー作成
m_ToolbarWnd.Create ( m_hWnd, 0, 0,
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE |
TBSTYLE_TOOLTIPS | TBSTYLE_FLAT | TBSTYLE_TRANSPARENT | TBSTYLE_LIST | TBSTYLE_CUSTOMERASE |
CCS_TOP | CCS_NODIVIDER | CCS_NOPARENTALIGN | CCS_NORESIZE
);
if ( ! m_ToolbarWnd.IsWindow() )
return -1;
return 0;
}
// IDeskBand
STDMETHODIMP CKumaBarBand::GetBandInfo(DWORD /* dwBandID */, DWORD /* dwViewMode */, DESKBANDINFO* pdbi)
{
if (pdbi)
{
//ツールバーの最小サイズ
if (pdbi->dwMask & DBIM_MINSIZE)
{
pdbi->ptMinSize.x = 100;
pdbi->ptMinSize.y = 22;
}
//ツールバーの最大サイズ
//0なら未設定
if (pdbi->dwMask & DBIM_MAXSIZE)
{
pdbi->ptMaxSize.x = -1;
pdbi->ptMaxSize.y = 22;
}
//分からない、知らない
if (pdbi->dwMask & DBIM_INTEGRAL)
{
pdbi->ptIntegral.x = 1;
pdbi->ptIntegral.y = 1;
}
//小麦粉か何かだ
if (pdbi->dwMask & DBIM_ACTUAL)
{
pdbi->ptActual.x = -1;
pdbi->ptActual.y = 22;
}
if (pdbi->dwMask & DBIM_TITLE)
{
//ツールバー左側に表示されるタイトル文字列
wcscpy_s(pdbi->wszTitle, _T("KUMA"));
}
if( pdbi->dwMask & DBIM_BKCOLOR )
{
//こう書いておけば、デフォルトの背景色になってくれるらしい
pdbi->dwMask &= ~DBIM_BKCOLOR;
}
if (pdbi->dwMask & DBIM_MODEFLAGS)
{
pdbi->dwModeFlags =
//他のサンプルの多くはこう書いていた
DBIMF_NORMAL | DBIMF_USECHEVRON |
//バーを表示する際に、必ず次の行にしてくれる指定だそうな
DBIMF_BREAK;
}
}
return S_OK;
}
// IOleWindow
STDMETHODIMP CKumaBarBand::GetWindow(HWND* phwnd)
{
if ( m_ToolbarWnd.IsWindow() )
{
*phwnd = m_ToolbarWnd.m_hWnd;
return S_OK;
}
//IOleWindowの取得
CComQIPtr<IOleWindow, &IID_IOleWindow> sp_OleWindow(m_spUnkSite);
if ( ! sp_OleWindow )
return E_FAIL;
//親Windowの取得
HWND hParentWnd;
sp_OleWindow->GetWindow(&hParentWnd);
//Window作成
Create (hParentWnd, 0, 0, WS_CHILD);
if ( ! IsWindow ( ) )
return E_FAIL;
//ツールバーのHWndを登録
*phwnd = m_ToolbarWnd.m_hWnd;
//IServiceProviderの取得
CComQIPtr<IServiceProvider> spServiceProvider(m_spUnkSite);
if ( ! spServiceProvider )
return E_FAIL;
//IWebBrowser2の取得
CComPtr<IWebBrowser2> spWebBrowser2;
if ( FAILED ( spServiceProvider->QueryService(SID_SWebBrowserApp,&spWebBrowser2)) )
return E_FAIL;
m_ToolbarWnd.SetBrowser(spWebBrowser2);
//ITravelLogStgの取得
CComPtr<ITravelLogStg> spTravelLogStg;
if ( FAILED ( spServiceProvider->QueryService(IID_ITravelLogStg,&spTravelLogStg)) )
return E_FAIL;
m_ToolbarWnd.SetTravelLogStg ( spTravelLogStg );
return S_OK;
}
STDMETHODIMP CKumaBarBand::ContextSensitiveHelp(BOOL /* fEnterMode */)
{
return E_NOTIMPL;
}
// IDockingWindow
STDMETHODIMP CKumaBarBand::ShowDW(BOOL /* fShow */)
{
//ツールバーのShowWindowを実行する
//まだツールバーを作ってないので、何もしない
return S_OK;
}
STDMETHODIMP CKumaBarBand::CloseDW(unsigned long /* dwReserved */)
{
//CLOSE時の動作。ツールバーを非表示にする
ShowDW(FALSE);
return S_OK;
}
STDMETHODIMP CKumaBarBand::ResizeBorderDW(const RECT* /* prcBorder */, IUnknown* /* punkToolbarSite */, BOOL /* fReserved */)
{
return E_NOTIMPL;
}
戻る
コメントスペース