KumaBarBand.cpp


// KumaBarBand.cpp : CKumaBarBand の実装

#include "stdafx.h"
#include "KumaBarBand.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);

    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;
}

戻る

コメントスペース