KumaBarBand.h


#pragma once
#include "ToolbarKuma.h"
#include "resource.h"
#include <comsvcs.h>

#include <shlguid.h> // ***追加*** IInputObjectとかがいる
#include <shlobj.h>  // ***追加*** IDeskBandやIDockingWindowがいる

// CKumaBarBand

//IDispatchImplを継承
//IEツールバーを作る際は、IDeskBandとかIObjectWithSiteを継承しないといけない
//そういったインターフェースを実装しておけば、IEが呼んでくれる感じになる
class ATL_NO_VTABLE CKumaBarBand :
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CKumaBarBand, &CLSID_KumaBarBand>,
    public IDeskBand,
    public IObjectWithSiteImpl<CKumaBarBand>,
    public IDispatchImpl<IKumaBarBand, &IID_IKumaBarBand, &LIBID_ToolbarKumaLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
    CKumaBarBand()
    {
    }

    //FinalConstruct の実行中、集約される内部オブジェクトが参照カウントをインクリメントし、
    //その後カウントを 0 にデクリメントした場合でも、オブジェクトが削除されないように保護します。
    //とMSDNに書いてあった
    DECLARE_PROTECT_FINAL_CONSTRUCT()

    HRESULT FinalConstruct()
    {
        return S_OK;
    }

    void FinalRelease()
    {
    }


//レジストリファイル(KumaBarBand.rgs)を読み込んで登録をしてくれる
DECLARE_REGISTRY_RESOURCEID(IDR_KUMABARBAND)

//Objectは集約できないとか書いてあった
//良く分からない、知らない、小麦粉か何かだ
DECLARE_NOT_AGGREGATABLE(CKumaBarBand)

//COMマップ
//ここに書いておけば、QueryInterfaceを通してインターフェイスをクライアントに公開できるそうな
//後でIDeskBandとかをここへ登録する
BEGIN_COM_MAP(CKumaBarBand)
    COM_INTERFACE_ENTRY(IKumaBarBand)
    COM_INTERFACE_ENTRY(IOleWindow)
    COM_INTERFACE_ENTRY_IID(IID_IDockingWindow, IDockingWindow)
    COM_INTERFACE_ENTRY_IID(IID_IDeskBand, IDeskBand)
    COM_INTERFACE_ENTRY(IObjectWithSite)
    COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()


// IKumaBarBand
public:


// IDeskBand
public:
    STDMETHOD(GetBandInfo)(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO* pdbi);

// IOleWindow
public:
    STDMETHOD(GetWindow)(HWND* phwnd);
    STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode);

// IDockingWindow
public:
    STDMETHOD(ShowDW)(BOOL fShow);
    STDMETHOD(CloseDW)(unsigned long dwReserved);
    STDMETHOD(ResizeBorderDW)(const RECT* prcBorder, IUnknown* punkToolbarSite, BOOL fReserved);

};

//外からRegisterServerが呼ばれた際に、
//ここで設定した内容(KumaBarBand.rgs)も自動でレジストリ登録してくれるらしい
//UnregisterServerも同じく
OBJECT_ENTRY_AUTO(__uuidof(KumaBarBand), CKumaBarBand)

戻る

コメントスペース