4 * Copyright 2009 Andrew Hill
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
25 public CComCoClass
<CStartMenu
, &CLSID_StartMenu
>,
26 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
28 public IObjectWithSite
,
29 public IInitializeObject
,
30 public IMenuBand
// FIXME
33 IBandSite
*m_pBandSite
;
40 // *** IOleWindow methods ***
41 virtual HRESULT STDMETHODCALLTYPE
ContextSensitiveHelp(BOOL fEnterMode
);
42 virtual HRESULT STDMETHODCALLTYPE
GetWindow(HWND
*phwnd
);
44 // *** IDeskBar methods ***
45 virtual HRESULT STDMETHODCALLTYPE
GetClient(IUnknown
**ppunkClient
);
46 virtual HRESULT STDMETHODCALLTYPE
OnPosRectChangeDB(LPRECT prc
);
47 virtual HRESULT STDMETHODCALLTYPE
SetClient(IUnknown
*punkClient
);
49 // *** IMenuPopup methods ***
50 virtual HRESULT STDMETHODCALLTYPE
OnSelect(DWORD dwSelectType
);
51 virtual HRESULT STDMETHODCALLTYPE
Popup(POINTL
*ppt
, RECTL
*prcExclude
, MP_POPUPFLAGS dwFlags
);
52 virtual HRESULT STDMETHODCALLTYPE
SetSubMenu(IMenuPopup
*pmp
, BOOL fSet
);
54 // *** IObjectWithSite methods ***
55 virtual HRESULT STDMETHODCALLTYPE
SetSite(IUnknown
*pUnkSite
);
56 virtual HRESULT STDMETHODCALLTYPE
GetSite(REFIID riid
, void **ppvSite
);
58 // *** IInitializeObject methods ***
59 virtual HRESULT STDMETHODCALLTYPE
Initialize();
61 // *** IMenuBand methods *** FIXME
62 virtual HRESULT STDMETHODCALLTYPE
IsMenuMessage(MSG
*pmsg
);
63 virtual HRESULT STDMETHODCALLTYPE
TranslateMenuMessage(MSG
*pmsg
, LRESULT
*plRet
);
65 DECLARE_REGISTRY_RESOURCEID(IDR_STARTMENU
)
66 DECLARE_NOT_AGGREGATABLE(CStartMenu
)
68 DECLARE_PROTECT_FINAL_CONSTRUCT()
70 BEGIN_COM_MAP(CStartMenu
)
71 COM_INTERFACE_ENTRY_IID(IID_IOleWindow
, IOleWindow
)
72 COM_INTERFACE_ENTRY_IID(IID_IDeskBar
, IDeskBar
)
73 COM_INTERFACE_ENTRY_IID(IID_IMenuPopup
, IMenuPopup
)
74 COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite
, IObjectWithSite
)
75 COM_INTERFACE_ENTRY_IID(IID_IInitializeObject
, IInitializeObject
)
76 COM_INTERFACE_ENTRY_IID(IID_IMenuBand
, IMenuBand
) // FIXME: Win does not export it
81 public CComCoClass
<CMenuBandSite
, &CLSID_MenuBandSite
>,
82 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
84 public IDeskBarClient
,
85 public IOleCommandTarget
,
87 public IInputObjectSite
,
88 public IWinEventHandler
,
89 public IServiceProvider
92 IUnknown
**m_pObjects
;
99 // *** IBandSite methods ***
100 virtual HRESULT STDMETHODCALLTYPE
AddBand(IUnknown
*punk
);
101 virtual HRESULT STDMETHODCALLTYPE
EnumBands(UINT uBand
, DWORD
*pdwBandID
);
102 virtual HRESULT STDMETHODCALLTYPE
QueryBand(DWORD dwBandID
, IDeskBand
**ppstb
, DWORD
*pdwState
, LPWSTR pszName
, int cchName
);
103 virtual HRESULT STDMETHODCALLTYPE
SetBandState(DWORD dwBandID
, DWORD dwMask
, DWORD dwState
);
104 virtual HRESULT STDMETHODCALLTYPE
RemoveBand(DWORD dwBandID
);
105 virtual HRESULT STDMETHODCALLTYPE
GetBandObject(DWORD dwBandID
, REFIID riid
, VOID
**ppv
);
106 virtual HRESULT STDMETHODCALLTYPE
SetBandSiteInfo(const BANDSITEINFO
*pbsinfo
);
107 virtual HRESULT STDMETHODCALLTYPE
GetBandSiteInfo(BANDSITEINFO
*pbsinfo
);
109 // *** IOleWindow methods ***
110 virtual HRESULT STDMETHODCALLTYPE
GetWindow(HWND
*phwnd
);
111 virtual HRESULT STDMETHODCALLTYPE
ContextSensitiveHelp(BOOL fEnterMode
);
113 // *** IDeskBarClient methods ***
114 virtual HRESULT STDMETHODCALLTYPE
SetDeskBarSite(IUnknown
*punkSite
);
115 virtual HRESULT STDMETHODCALLTYPE
SetModeDBC(DWORD dwMode
);
116 virtual HRESULT STDMETHODCALLTYPE
UIActivateDBC(DWORD dwState
);
117 virtual HRESULT STDMETHODCALLTYPE
GetSize(DWORD dwWhich
, LPRECT prc
);
119 // *** IOleCommandTarget methods ***
120 virtual HRESULT STDMETHODCALLTYPE
QueryStatus(const GUID
*pguidCmdGroup
, ULONG cCmds
, OLECMD prgCmds
[ ], OLECMDTEXT
*pCmdText
);
121 virtual HRESULT STDMETHODCALLTYPE
Exec(const GUID
*pguidCmdGroup
, DWORD nCmdID
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
);
123 // *** IInputObject methods ***
124 virtual HRESULT STDMETHODCALLTYPE
UIActivateIO(BOOL fActivate
, LPMSG lpMsg
);
125 virtual HRESULT STDMETHODCALLTYPE
HasFocusIO();
126 virtual HRESULT STDMETHODCALLTYPE
TranslateAcceleratorIO(LPMSG lpMsg
);
128 // *** IInputObjectSite methods ***
129 virtual HRESULT STDMETHODCALLTYPE
OnFocusChangeIS(IUnknown
*punkObj
, BOOL fSetFocus
);
131 // *** IWinEventHandler methods ***
132 virtual HRESULT STDMETHODCALLTYPE
OnWinEvent(HWND paramC
, UINT param10
, WPARAM param14
, LPARAM param18
, LRESULT
*param1C
);
133 virtual HRESULT STDMETHODCALLTYPE
IsWindowOwner(HWND paramC
);
135 // *** IServiceProvider methods ***
136 virtual HRESULT STDMETHODCALLTYPE
QueryService(REFGUID guidService
, REFIID riid
, void **ppvObject
);
138 DECLARE_REGISTRY_RESOURCEID(IDR_MENUBANDSITE
)
139 DECLARE_NOT_AGGREGATABLE(CMenuBandSite
)
141 DECLARE_PROTECT_FINAL_CONSTRUCT()
143 BEGIN_COM_MAP(CMenuBandSite
)
144 COM_INTERFACE_ENTRY_IID(IID_IBandSite
, IBandSite
)
145 COM_INTERFACE_ENTRY_IID(IID_IOleWindow
, IOleWindow
)
146 COM_INTERFACE_ENTRY_IID(IID_IDeskBarClient
, IDeskBarClient
)
147 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget
, IOleCommandTarget
)
148 COM_INTERFACE_ENTRY_IID(IID_IInputObject
, IInputObject
)
149 COM_INTERFACE_ENTRY_IID(IID_IInputObjectSite
, IInputObjectSite
)
150 COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler
, IWinEventHandler
)
151 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider
, IServiceProvider
)
155 #endif // _STARTMENU_H_