[rshell]
[reactos.git] / dll / win32 / shell32 / startmenu.h
1 /*
2 * Start menu object
3 *
4 * Copyright 2009 Andrew Hill
5 *
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.
10 *
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.
15 *
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
19 */
20
21 #ifndef _STARTMENU_H_
22 #define _STARTMENU_H_
23
24 class CStartMenu :
25 public CComCoClass<CStartMenu, &CLSID_StartMenu>,
26 public CComObjectRootEx<CComMultiThreadModelNoCS>,
27 public IMenuPopup,
28 public IObjectWithSite,
29 public IInitializeObject,
30 public IMenuBand // FIXME
31 {
32 private:
33 IBandSite *m_pBandSite;
34 IUnknown *m_pUnkSite;
35
36 public:
37 CStartMenu();
38 ~CStartMenu();
39
40 // *** IOleWindow methods ***
41 virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode);
42 virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *phwnd);
43
44 // *** IDeskBar methods ***
45 virtual HRESULT STDMETHODCALLTYPE GetClient(IUnknown **ppunkClient);
46 virtual HRESULT STDMETHODCALLTYPE OnPosRectChangeDB(LPRECT prc);
47 virtual HRESULT STDMETHODCALLTYPE SetClient(IUnknown *punkClient);
48
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);
53
54 // *** IObjectWithSite methods ***
55 virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite);
56 virtual HRESULT STDMETHODCALLTYPE GetSite(REFIID riid, void **ppvSite);
57
58 // *** IInitializeObject methods ***
59 virtual HRESULT STDMETHODCALLTYPE Initialize();
60
61 // *** IMenuBand methods *** FIXME
62 virtual HRESULT STDMETHODCALLTYPE IsMenuMessage(MSG *pmsg);
63 virtual HRESULT STDMETHODCALLTYPE TranslateMenuMessage(MSG *pmsg, LRESULT *plRet);
64
65 DECLARE_REGISTRY_RESOURCEID(IDR_STARTMENU)
66 DECLARE_NOT_AGGREGATABLE(CStartMenu)
67
68 DECLARE_PROTECT_FINAL_CONSTRUCT()
69
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
77 END_COM_MAP()
78 };
79
80 class CMenuBandSite :
81 public CComCoClass<CMenuBandSite, &CLSID_MenuBandSite>,
82 public CComObjectRootEx<CComMultiThreadModelNoCS>,
83 public IBandSite,
84 public IDeskBarClient,
85 public IOleCommandTarget,
86 public IInputObject,
87 public IInputObjectSite,
88 public IWinEventHandler,
89 public IServiceProvider
90 {
91 private:
92 IUnknown **m_pObjects;
93 ULONG m_cObjects;
94
95 public:
96 CMenuBandSite();
97 ~CMenuBandSite();
98
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);
108
109 // *** IOleWindow methods ***
110 virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *phwnd);
111 virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode);
112
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);
118
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);
122
123 // *** IInputObject methods ***
124 virtual HRESULT STDMETHODCALLTYPE UIActivateIO(BOOL fActivate, LPMSG lpMsg);
125 virtual HRESULT STDMETHODCALLTYPE HasFocusIO();
126 virtual HRESULT STDMETHODCALLTYPE TranslateAcceleratorIO(LPMSG lpMsg);
127
128 // *** IInputObjectSite methods ***
129 virtual HRESULT STDMETHODCALLTYPE OnFocusChangeIS(IUnknown *punkObj, BOOL fSetFocus);
130
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);
134
135 // *** IServiceProvider methods ***
136 virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject);
137
138 DECLARE_REGISTRY_RESOURCEID(IDR_MENUBANDSITE)
139 DECLARE_NOT_AGGREGATABLE(CMenuBandSite)
140
141 DECLARE_PROTECT_FINAL_CONSTRUCT()
142
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)
152 END_COM_MAP()
153 };
154
155 #endif /* _STARTMENU_H_ */