4 * Copyright 2014 David Quintana
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
23 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
24 public CWindowImpl
<CMenuSite
, CWindow
, CControlWinTraits
>,
26 public IDeskBarClient
,
27 public IOleCommandTarget
,
29 public IInputObjectSite
,
30 public IWinEventHandler
,
31 public IServiceProvider
34 CComPtr
<IUnknown
> m_DeskBarSite
;
35 CComPtr
<IUnknown
> m_BandObject
;
36 CComPtr
<IDeskBand
> m_DeskBand
;
37 CComPtr
<IWinEventHandler
> m_WinEventHandler
;
44 DECLARE_WND_CLASS_EX(_T("MenuSite"), 0, COLOR_MENU
)
46 DECLARE_NOT_AGGREGATABLE(CMenuSite
)
47 DECLARE_PROTECT_FINAL_CONSTRUCT()
48 BEGIN_COM_MAP(CMenuSite
)
49 COM_INTERFACE_ENTRY_IID(IID_IBandSite
, IBandSite
)
50 COM_INTERFACE_ENTRY_IID(IID_IDeskBarClient
, IDeskBarClient
)
51 COM_INTERFACE_ENTRY_IID(IID_IOleWindow
, IOleWindow
)
52 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget
, IOleCommandTarget
)
53 COM_INTERFACE_ENTRY_IID(IID_IInputObject
, IInputObject
)
54 COM_INTERFACE_ENTRY_IID(IID_IInputObjectSite
, IInputObjectSite
)
55 COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler
, IWinEventHandler
)
56 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider
, IServiceProvider
)
60 virtual HRESULT STDMETHODCALLTYPE
AddBand(IUnknown
* punk
);
61 virtual HRESULT STDMETHODCALLTYPE
EnumBands(UINT uBand
, DWORD
* pdwBandID
);
62 virtual HRESULT STDMETHODCALLTYPE
QueryBand(DWORD dwBandID
, IDeskBand
**ppstb
, DWORD
*pdwState
, LPWSTR pszName
, int cchName
);
63 virtual HRESULT STDMETHODCALLTYPE
GetBandObject(DWORD dwBandID
, REFIID riid
, VOID
**ppv
);
66 virtual HRESULT STDMETHODCALLTYPE
SetDeskBarSite(IUnknown
*punkSite
);
67 virtual HRESULT STDMETHODCALLTYPE
GetSize(DWORD dwWhich
, LPRECT prc
);
68 virtual HRESULT STDMETHODCALLTYPE
UIActivateDBC(DWORD dwState
);
71 virtual HRESULT STDMETHODCALLTYPE
GetWindow(HWND
*phwnd
);
74 virtual HRESULT STDMETHODCALLTYPE
QueryStatus(const GUID
* pguidCmdGroup
, ULONG cCmds
, OLECMD prgCmds
[], OLECMDTEXT
*pCmdText
);
75 virtual HRESULT STDMETHODCALLTYPE
Exec(const GUID
* pguidCmdGroup
, DWORD nCmdID
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
);
78 virtual HRESULT STDMETHODCALLTYPE
UIActivateIO(BOOL fActivate
, LPMSG lpMsg
);
79 virtual HRESULT STDMETHODCALLTYPE
HasFocusIO();
80 virtual HRESULT STDMETHODCALLTYPE
TranslateAcceleratorIO(LPMSG lpMsg
);
83 virtual HRESULT STDMETHODCALLTYPE
OnFocusChangeIS(IUnknown
*punkObj
, BOOL fSetFocus
);
86 virtual HRESULT STDMETHODCALLTYPE
IsWindowOwner(HWND hWnd
);
87 virtual HRESULT STDMETHODCALLTYPE
OnWinEvent(HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*theResult
);
90 virtual HRESULT STDMETHODCALLTYPE
QueryService(REFGUID guidService
, REFIID riid
, void **ppvObject
);
93 // Using custom message map instead
94 virtual BOOL
ProcessWindowMessage(HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
&lResult
, DWORD mapId
= 0);
97 virtual HRESULT STDMETHODCALLTYPE
ContextSensitiveHelp(BOOL fEnterMode
);
98 virtual HRESULT STDMETHODCALLTYPE
GetBandSiteInfo(BANDSITEINFO
*pbsinfo
);
99 virtual HRESULT STDMETHODCALLTYPE
RemoveBand(DWORD dwBandID
);
100 virtual HRESULT STDMETHODCALLTYPE
SetBandSiteInfo(const BANDSITEINFO
*pbsinfo
);
101 virtual HRESULT STDMETHODCALLTYPE
SetBandState(DWORD dwBandID
, DWORD dwMask
, DWORD dwState
);
102 virtual HRESULT STDMETHODCALLTYPE
SetModeDBC(DWORD dwMode
);
105 IUnknown
* ToIUnknown() { return static_cast<IDeskBarClient
*>(this); }