4 * Copyright 2007 Hervé Poussineau
5 * Copyright 2009 Andrew Hill
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
25 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
27 public IInputObjectSite
,
29 public IDeskBarClient
,
30 public IWinEventHandler
,
31 public IPersistStream
,
33 public IServiceProvider
,
34 public IBandSiteHelper
,
35 public IOleCommandTarget
41 IOleWindow
*OleWindow
;
42 IWinEventHandler
*WndEvtHandler
;
49 struct BandObject
*fBands
;
51 CComPtr
<IOleWindow
> fOleWindow
;
56 // *** IBandSite methods ***
57 virtual HRESULT STDMETHODCALLTYPE
AddBand(IUnknown
*punk
);
58 virtual HRESULT STDMETHODCALLTYPE
EnumBands(UINT uBand
, DWORD
*pdwBandID
);
59 virtual HRESULT STDMETHODCALLTYPE
QueryBand(DWORD dwBandID
, IDeskBand
**ppstb
, DWORD
*pdwState
, LPWSTR pszName
, int cchName
);
60 virtual HRESULT STDMETHODCALLTYPE
SetBandState(DWORD dwBandID
, DWORD dwMask
, DWORD dwState
);
61 virtual HRESULT STDMETHODCALLTYPE
RemoveBand(DWORD dwBandID
);
62 virtual HRESULT STDMETHODCALLTYPE
GetBandObject(DWORD dwBandID
, REFIID riid
, void **ppv
);
63 virtual HRESULT STDMETHODCALLTYPE
SetBandSiteInfo(const BANDSITEINFO
*pbsinfo
);
64 virtual HRESULT STDMETHODCALLTYPE
GetBandSiteInfo(BANDSITEINFO
*pbsinfo
);
66 // *** IWinEventHandler methods ***
67 virtual HRESULT STDMETHODCALLTYPE
OnWinEvent(HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*theResult
);
68 virtual HRESULT STDMETHODCALLTYPE
IsWindowOwner(HWND hWnd
);
70 // *** IOleWindow methods ***
71 virtual HRESULT STDMETHODCALLTYPE
GetWindow(HWND
*lphwnd
);
72 virtual HRESULT STDMETHODCALLTYPE
ContextSensitiveHelp(BOOL fEnterMode
);
74 // *** IDeskBarClient methods ***
75 virtual HRESULT STDMETHODCALLTYPE
SetDeskBarSite(IUnknown
*punkSite
);
76 virtual HRESULT STDMETHODCALLTYPE
SetModeDBC(DWORD dwMode
);
77 virtual HRESULT STDMETHODCALLTYPE
UIActivateDBC(DWORD dwState
);
78 virtual HRESULT STDMETHODCALLTYPE
GetSize(DWORD dwWhich
, LPRECT prc
);
80 // *** IOleCommandTarget methods ***
81 virtual HRESULT STDMETHODCALLTYPE
QueryStatus(const GUID
*pguidCmdGroup
, ULONG cCmds
, OLECMD prgCmds
[ ], OLECMDTEXT
*pCmdText
);
82 virtual HRESULT STDMETHODCALLTYPE
Exec(const GUID
*pguidCmdGroup
, DWORD nCmdID
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
);
84 // *** IInputObject methods ***
85 virtual HRESULT STDMETHODCALLTYPE
UIActivateIO(BOOL fActivate
, LPMSG lpMsg
);
86 virtual HRESULT STDMETHODCALLTYPE
HasFocusIO();
87 virtual HRESULT STDMETHODCALLTYPE
TranslateAcceleratorIO(LPMSG lpMsg
);
89 // *** IInputObjectSite methods ***
90 virtual HRESULT STDMETHODCALLTYPE
OnFocusChangeIS(struct IUnknown
*paramC
, int param10
);
92 // *** IServiceProvider methods ***
93 virtual HRESULT STDMETHODCALLTYPE
QueryService(REFGUID guidService
, REFIID riid
, void **ppvObject
);
95 // *** IPersist methods ***
96 virtual HRESULT STDMETHODCALLTYPE
GetClassID(CLSID
*pClassID
);
98 // *** IPersistStream methods ***
99 virtual HRESULT STDMETHODCALLTYPE
IsDirty();
100 virtual HRESULT STDMETHODCALLTYPE
Load(IStream
*pStm
);
101 virtual HRESULT STDMETHODCALLTYPE
Save(IStream
*pStm
, BOOL fClearDirty
);
102 virtual HRESULT STDMETHODCALLTYPE
GetSizeMax(ULARGE_INTEGER
*pcbSize
);
104 // *** IDropTarget methods ***
105 virtual HRESULT STDMETHODCALLTYPE
DragEnter(IDataObject
*pDataObj
, DWORD grfKeyState
, POINTL pt
, DWORD
*pdwEffect
);
106 virtual HRESULT STDMETHODCALLTYPE
DragOver(DWORD grfKeyState
, POINTL pt
, DWORD
*pdwEffect
);
107 virtual HRESULT STDMETHODCALLTYPE
DragLeave();
108 virtual HRESULT STDMETHODCALLTYPE
Drop(IDataObject
*pDataObj
, DWORD grfKeyState
, POINTL pt
, DWORD
*pdwEffect
);
110 // *** IBandSiteHelper methods ***
111 virtual HRESULT STDMETHODCALLTYPE
LoadFromStreamBS(IStream
*, const GUID
&, void **);
112 virtual HRESULT STDMETHODCALLTYPE
SaveToStreamBS(IUnknown
*, IStream
*);
115 UINT
GetBandID(struct BandObject
*Band
);
116 struct BandObject
*GetBandByID(DWORD dwBandID
);
117 void FreeBand(struct BandObject
*Band
);
118 DWORD
GetBandSiteViewMode();
119 VOID
BuildRebarBandInfo(struct BandObject
*Band
, REBARBANDINFOW
*prbi
);
120 HRESULT
UpdateSingleBand(struct BandObject
*Band
);
121 HRESULT
UpdateAllBands();
122 HRESULT
UpdateBand(DWORD dwBandID
);
123 struct BandObject
*GetBandFromHwnd(HWND hwnd
);
124 HRESULT
_IsBandDeletable(DWORD dwBandID
);
125 HRESULT
OnContextMenu(HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*plrResult
);
127 BEGIN_COM_MAP(CBandSiteBase
)
128 COM_INTERFACE_ENTRY_IID(IID_IBandSite
, IBandSite
)
129 COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler
, IWinEventHandler
)
130 COM_INTERFACE_ENTRY_IID(IID_IOleWindow
, IOleWindow
)
131 COM_INTERFACE_ENTRY_IID(IID_IDeskBarClient
, IDeskBarClient
)
132 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget
, IOleCommandTarget
)
133 COM_INTERFACE_ENTRY_IID(IID_IInputObject
, IInputObject
)
134 COM_INTERFACE_ENTRY_IID(IID_IInputObjectSite
, IInputObjectSite
)
135 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider
, IServiceProvider
)
136 COM_INTERFACE_ENTRY_IID(IID_IPersist
, IPersist
)
137 COM_INTERFACE_ENTRY_IID(IID_IPersistStream
, IPersistStream
)
138 COM_INTERFACE_ENTRY_IID(IID_IDropTarget
, IDropTarget
)
139 COM_INTERFACE_ENTRY_IID(IID_IBandSiteHelper
, IBandSiteHelper
)
144 public CComCoClass
<CBandSite
, &CLSID_RebarBandSite
>,
149 DECLARE_REGISTRY_RESOURCEID(IDR_BANDSITE
)
150 DECLARE_AGGREGATABLE(CBandSite
)
152 DECLARE_PROTECT_FINAL_CONSTRUCT()