KumaBarBand.h
#pragma once
#include "ToolbarKuma.h"
#include "resource.h"
#include "ToolbarWindow.h"
#include <comsvcs.h>
#include <shlguid.h>
#include <shlobj.h>
// 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 CWindowImpl<CKumaBarBand>,
public IDispatchImpl<IKumaBarBand, &IID_IKumaBarBand, &LIBID_ToolbarKumaLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CKumaBarBand();
~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()
private:
CToolbarWindow m_ToolbarWnd;
HWND m_ParentHWnd;//なんとなくここ削除
//CWindowImpl
public:
DECLARE_WND_CLASS(NULL)
BEGIN_MSG_MAP(CKumaBarBand)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
CHAIN_MSG_MAP_MEMBER(m_ToolbarWnd) //この2行追加
END_MSG_MAP()
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); //これも追加
// 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)
戻る
コメントスペース