ced8e226e7eb84729afd058c7682d4ebf67f913d
[reactos.git] / base / shell / rshell / logging / CMenuDeskBarWrap.cpp
1 /*
2 * Shell Menu Desk Bar
3 *
4 * Copyright 2014 David Quintana
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 #include "precomp.h"
21 #include "wraplog.h"
22
23 class CMenuDeskBarWrap :
24 public CComCoClass<CMenuDeskBarWrap>,
25 public CComObjectRootEx<CComMultiThreadModelNoCS>,
26 public IOleCommandTarget,
27 public IServiceProvider,
28 public IInputObjectSite,
29 public IInputObject,
30 public IMenuPopup,
31 public IObjectWithSite,
32 public IBanneredBar,
33 public IInitializeObject
34 {
35 public:
36 CMenuDeskBarWrap();
37 ~CMenuDeskBarWrap();
38
39 private:
40 IUnknown * m_IUnknown;
41 IMenuPopup * m_IMenuPopup;
42 IOleCommandTarget * m_IOleCommandTarget;
43 IServiceProvider * m_IServiceProvider;
44 IDeskBar * m_IDeskBar;
45 IOleWindow * m_IOleWindow;
46 IInputObjectSite * m_IInputObjectSite;
47 IInputObject * m_IInputObject;
48 IObjectWithSite * m_IObjectWithSite;
49 IBanneredBar * m_IBanneredBar;
50 IInitializeObject * m_IInitializeObject;
51
52 public:
53 // *** IMenuPopup methods ***
54 virtual HRESULT STDMETHODCALLTYPE Popup(POINTL *ppt, RECTL *prcExclude, MP_POPUPFLAGS dwFlags);
55 virtual HRESULT STDMETHODCALLTYPE OnSelect(DWORD dwSelectType);
56 virtual HRESULT STDMETHODCALLTYPE SetSubMenu(IMenuPopup *pmp, BOOL fSet);
57
58 // *** IOleWindow methods ***
59 virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *phwnd);
60 virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode);
61
62 // *** IObjectWithSite methods ***
63 virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite);
64 virtual HRESULT STDMETHODCALLTYPE GetSite(REFIID riid, PVOID *ppvSite);
65
66 // *** IBanneredBar methods ***
67 virtual HRESULT STDMETHODCALLTYPE SetIconSize(DWORD iIcon);
68 virtual HRESULT STDMETHODCALLTYPE GetIconSize(DWORD* piIcon);
69 virtual HRESULT STDMETHODCALLTYPE SetBitmap(HBITMAP hBitmap);
70 virtual HRESULT STDMETHODCALLTYPE GetBitmap(HBITMAP* phBitmap);
71
72 // *** IInitializeObject methods ***
73 virtual HRESULT STDMETHODCALLTYPE Initialize(THIS);
74
75 // *** IOleCommandTarget methods ***
76 virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText);
77 virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
78
79 // *** IServiceProvider methods ***
80 virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject);
81
82 // *** IInputObjectSite methods ***
83 virtual HRESULT STDMETHODCALLTYPE OnFocusChangeIS(LPUNKNOWN lpUnknown, BOOL bFocus);
84
85 // *** IInputObject methods ***
86 virtual HRESULT STDMETHODCALLTYPE UIActivateIO(BOOL bActivating, LPMSG lpMsg);
87 virtual HRESULT STDMETHODCALLTYPE HasFocusIO(THIS);
88 virtual HRESULT STDMETHODCALLTYPE TranslateAcceleratorIO(LPMSG lpMsg);
89
90 // *** IDeskBar methods ***
91 virtual HRESULT STDMETHODCALLTYPE SetClient(IUnknown *punkClient);
92 virtual HRESULT STDMETHODCALLTYPE GetClient(IUnknown **ppunkClient);
93 virtual HRESULT STDMETHODCALLTYPE OnPosRectChangeDB(LPRECT prc);
94
95 DECLARE_NOT_AGGREGATABLE(CMenuDeskBarWrap)
96 DECLARE_PROTECT_FINAL_CONSTRUCT()
97
98 BEGIN_COM_MAP(CMenuDeskBarWrap)
99 COM_INTERFACE_ENTRY_IID(IID_IMenuPopup, IMenuPopup)
100 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
101 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
102 COM_INTERFACE_ENTRY_IID(IID_IInputObjectSite, IInputObjectSite)
103 COM_INTERFACE_ENTRY_IID(IID_IInputObject, IInputObject)
104 COM_INTERFACE_ENTRY_IID(IID_IDeskBar, IMenuPopup)
105 COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IMenuPopup)
106 COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite)
107 COM_INTERFACE_ENTRY_IID(IID_IBanneredBar, IBanneredBar)
108 COM_INTERFACE_ENTRY_IID(IID_IInitializeObject, IInitializeObject)
109 END_COM_MAP()
110 };
111
112 extern "C"
113 HRESULT CMenuDeskBar_Wrapper(REFIID riid, LPVOID *ppv)
114 {
115 *ppv = NULL;
116
117 CMenuDeskBarWrap * deskbar = new CComObject<CMenuDeskBarWrap>();
118
119 if (!deskbar)
120 return E_OUTOFMEMORY;
121
122 HRESULT hr = deskbar->QueryInterface(riid, ppv);
123
124 if (FAILED(hr))
125 deskbar->Release();
126
127 return hr;
128 }
129
130 CMenuDeskBarWrap::CMenuDeskBarWrap()
131 {
132 WrapLogOpen();
133
134 CoCreateInstance(CLSID_MenuDeskBar, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IMenuPopup, &m_IMenuPopup));
135 m_IMenuPopup->QueryInterface(IID_PPV_ARG(IUnknown, &m_IUnknown));
136 m_IUnknown->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &m_IOleCommandTarget));
137 m_IUnknown->QueryInterface(IID_PPV_ARG(IServiceProvider, &m_IServiceProvider));
138 m_IUnknown->QueryInterface(IID_PPV_ARG(IDeskBar, &m_IDeskBar));
139 m_IUnknown->QueryInterface(IID_PPV_ARG(IOleWindow, &m_IOleWindow));
140 m_IUnknown->QueryInterface(IID_PPV_ARG(IInputObjectSite, &m_IInputObjectSite));
141 m_IUnknown->QueryInterface(IID_PPV_ARG(IInputObject, &m_IInputObject));
142 m_IUnknown->QueryInterface(IID_PPV_ARG(IObjectWithSite, &m_IObjectWithSite));
143 m_IUnknown->QueryInterface(IID_PPV_ARG(IBanneredBar, &m_IBanneredBar));
144 m_IUnknown->QueryInterface(IID_PPV_ARG(IInitializeObject, &m_IInitializeObject));
145 }
146
147 CMenuDeskBarWrap::~CMenuDeskBarWrap()
148 {
149 m_IUnknown->Release();
150 m_IMenuPopup->Release();
151 m_IOleCommandTarget->Release();
152 m_IServiceProvider->Release();
153 m_IDeskBar->Release();
154 m_IOleWindow->Release();
155 m_IInputObjectSite->Release();
156 m_IInputObject->Release();
157 m_IObjectWithSite->Release();
158 m_IBanneredBar->Release();
159 m_IInitializeObject->Release();
160
161 WrapLogClose();
162 }
163
164 // *** IMenuPopup methods ***
165 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::Popup(POINTL *ppt, RECTL *prcExclude, MP_POPUPFLAGS dwFlags)
166 {
167 WrapLogEnter("CMenuDeskBarWrap<%p>::Popup(POINTL *ppt=%p, RECTL *prcExclude=%p, MP_POPUPFLAGS dwFlags=%08x)\n", this, ppt, prcExclude, dwFlags);
168 HRESULT hr = m_IMenuPopup->Popup(ppt, prcExclude, dwFlags);
169 WrapLogExit("CMenuDeskBarWrap::Popup() = %08x\n", hr);
170 return hr;
171 }
172
173 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::OnSelect(DWORD dwSelectType)
174 {
175 WrapLogEnter("CMenuDeskBarWrap<%p>::OnSelect(DWORD dwSelectType=%08x)\n", this, dwSelectType);
176 HRESULT hr = m_IMenuPopup->OnSelect(dwSelectType);
177 WrapLogExit("CMenuDeskBarWrap::OnSelect() = %08x\n", hr);
178 return hr;
179 }
180
181 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::SetSubMenu(IMenuPopup *pmp, BOOL fSet)
182 {
183 WrapLogEnter("CMenuDeskBarWrap<%p>::SetSubMenu(IMenuPopup *pmp=%p, BOOL fSet=%d)\n", this, pmp, fSet);
184 HRESULT hr = m_IMenuPopup->SetSubMenu(pmp, fSet);
185 WrapLogExit("CMenuDeskBarWrap::SetSubMenu() = %08x\n", hr);
186 return hr;
187 }
188
189 // *** IOleWindow methods ***
190 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::GetWindow(HWND *phwnd)
191 {
192 WrapLogEnter("CMenuDeskBarWrap<%p>::GetWindow(HWND *phwnd=%p)\n", this, phwnd);
193 HRESULT hr = m_IOleWindow->GetWindow(phwnd);
194 if (phwnd) WrapLogMsg("*phwnd=%p\n", *phwnd);
195 WrapLogExit("CMenuDeskBarWrap::GetWindow() = %08x\n", hr);
196 return hr;
197 }
198
199 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::ContextSensitiveHelp(BOOL fEnterMode)
200 {
201 WrapLogEnter("CMenuDeskBarWrap<%p>::ContextSensitiveHelp(BOOL fEnterMode=%d)\n", this, fEnterMode);
202 HRESULT hr = m_IOleWindow->ContextSensitiveHelp(fEnterMode);
203 WrapLogExit("CMenuDeskBarWrap::ContextSensitiveHelp() = %08x\n", hr);
204 return hr;
205 }
206
207 // *** IObjectWithSite methods ***
208 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::SetSite(IUnknown *pUnkSite)
209 {
210 WrapLogEnter("CMenuDeskBarWrap<%p>::SetSite(IUnknown *pUnkSite=%p)\n", this, pUnkSite);
211 HRESULT hr = m_IObjectWithSite->SetSite(pUnkSite);
212 WrapLogExit("CMenuDeskBarWrap::SetSite() = %08x\n", hr);
213 return hr;
214 }
215
216 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::GetSite(REFIID riid, PVOID *ppvSite)
217 {
218 WrapLogEnter("CMenuDeskBarWrap<%p>::GetSite(REFIID riid=%s, PVOID *ppvSite=%p)\n", this, Wrap(riid), ppvSite);
219 HRESULT hr = m_IObjectWithSite->GetSite(riid, ppvSite);
220 if (ppvSite) WrapLogMsg("*ppvSite=%p\n", *ppvSite);
221 WrapLogExit("CMenuDeskBarWrap::GetSite() = %08x\n", hr);
222 return hr;
223 }
224
225 // *** IBanneredBar methods ***
226 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::SetIconSize(DWORD iIcon)
227 {
228 WrapLogEnter("CMenuDeskBarWrap<%p>::SetIconSize(DWORD iIcon=%d)\n", this, iIcon);
229 HRESULT hr = m_IBanneredBar->SetIconSize(iIcon);
230 WrapLogExit("CMenuDeskBarWrap::SetIconSize() = %08x\n", hr);
231 return hr;
232 }
233
234 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::GetIconSize(DWORD* piIcon)
235 {
236 WrapLogEnter("CMenuDeskBarWrap<%p>::GetIconSize(DWORD* piIcon=%p)\n", this, piIcon);
237 HRESULT hr = m_IBanneredBar->GetIconSize(piIcon);
238 if (piIcon) WrapLogMsg("*piIcon=%d\n", *piIcon);
239 WrapLogExit("CMenuDeskBarWrap::GetIconSize() = %08x\n", hr);
240 return hr;
241 }
242
243 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::SetBitmap(HBITMAP hBitmap)
244 {
245 WrapLogEnter("CMenuDeskBarWrap<%p>::SetBitmap(HBITMAP hBitmap=%p)\n", this, hBitmap);
246 HRESULT hr = m_IBanneredBar->SetBitmap(hBitmap);
247 WrapLogExit("CMenuDeskBarWrap::SetBitmap() = %08x\n", hr);
248 return hr;
249 }
250
251 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::GetBitmap(HBITMAP* phBitmap)
252 {
253 WrapLogEnter("CMenuDeskBarWrap<%p>::GetBitmap(HBITMAP* phBitmap=%p)\n", this, phBitmap);
254 HRESULT hr = m_IBanneredBar->GetBitmap(phBitmap);
255 if (phBitmap) WrapLogMsg("*phBitmap=%p\n", *phBitmap);
256 WrapLogExit("CMenuDeskBarWrap::GetBitmap() = %08x\n", hr);
257 return hr;
258 }
259
260
261 // *** IInitializeObject methods ***
262 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::Initialize(THIS)
263 {
264 WrapLogEnter("CMenuDeskBarWrap<%p>::Initialize()\n", this);
265 HRESULT hr = m_IInitializeObject->Initialize();
266 WrapLogExit("CMenuDeskBarWrap::Initialize() = %08x\n", hr);
267 return hr;
268 }
269
270 // *** IOleCommandTarget methods ***
271 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText)
272 {
273 WrapLogEnter("CMenuDeskBarWrap<%p>::QueryStatus(const GUID *pguidCmdGroup=%p, ULONG cCmds=%u, prgCmds=%p, pCmdText=%p)\n", this, pguidCmdGroup, cCmds, prgCmds, pCmdText);
274 HRESULT hr = m_IOleCommandTarget->QueryStatus(pguidCmdGroup, cCmds, prgCmds, pCmdText);
275 if (pguidCmdGroup) WrapLogMsg("*pguidCmdGroup=%s\n", Wrap(*pguidCmdGroup));
276 WrapLogExit("CMenuDeskBarWrap::QueryStatus() = %08x\n", hr);
277 return hr;
278 }
279
280 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
281 {
282 WrapLogEnter("CMenuDeskBarWrap<%p>::Exec(const GUID *pguidCmdGroup=%p, DWORD nCmdID=%d, DWORD nCmdexecopt=%d, VARIANT *pvaIn=%p, VARIANT *pvaOut=%p)\n", this, pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);
283 if (pguidCmdGroup) WrapLogMsg("*pguidCmdGroup=%s\n", Wrap(*pguidCmdGroup));
284 HRESULT hr = m_IOleCommandTarget->Exec(pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);
285 WrapLogExit("CMenuDeskBarWrap::Exec() = %08x\n", hr);
286 return hr;
287 }
288
289 // *** IServiceProvider methods ***
290 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::QueryService(REFGUID guidService, REFIID riid, void **ppvObject)
291 {
292 WrapLogEnter("CMenuDeskBarWrap<%p>::QueryService(REFGUID guidService=%s, REFIID riid=%s, void **ppvObject=%p)\n", this, Wrap(guidService), Wrap(riid), ppvObject);
293
294 if (IsEqualIID(guidService, SID_SMenuPopup))
295 {
296 WrapLogMsg("SID is SID_SMenuPopup. Using QueryInterface of self instead of wrapped object.\n");
297 HRESULT hr = this->QueryInterface(riid, ppvObject);
298 if (ppvObject) WrapLogMsg("*ppvObject=%p\n", *ppvObject);
299 if (SUCCEEDED(hr))
300 {
301 WrapLogExit("CMenuDeskBarWrap::QueryService() = %08x\n", hr);
302 return hr;
303 }
304 else
305 {
306 WrapLogMsg("QueryInterface on wrapper failed. Handing over to innter object.\n");
307 }
308 }
309 else if (IsEqualIID(guidService, SID_SMenuBandParent))
310 {
311 WrapLogMsg("SID is SID_SMenuBandParent. Using QueryInterface of self instead of wrapped object.\n");
312 HRESULT hr = this->QueryInterface(riid, ppvObject);
313 if (ppvObject) WrapLogMsg("*ppvObject=%p\n", *ppvObject);
314 if (SUCCEEDED(hr))
315 {
316 WrapLogExit("CMenuDeskBarWrap::QueryService() = %08x\n", hr);
317 return hr;
318 }
319 else
320 {
321 WrapLogMsg("QueryInterface on wrapper failed. Handing over to innter object.\n");
322 }
323 }
324 else if (IsEqualIID(guidService, SID_STopLevelBrowser))
325 {
326 WrapLogMsg("SID is SID_STopLevelBrowser. Using QueryInterface of self instead of wrapped object.\n");
327 HRESULT hr = this->QueryInterface(riid, ppvObject);
328 if (ppvObject) WrapLogMsg("*ppvObject=%p\n", *ppvObject);
329 if (SUCCEEDED(hr))
330 {
331 WrapLogExit("CMenuDeskBarWrap::QueryService() = %08x\n", hr);
332 return hr;
333 }
334 else
335 {
336 WrapLogMsg("QueryInterface on wrapper failed. Handing over to innter object.\n");
337 }
338 }
339 else
340 {
341 WrapLogMsg("SID not identified. Calling wrapped object's QueryService.\n");
342 }
343 HRESULT hr = m_IServiceProvider->QueryService(guidService, riid, ppvObject);
344 if (ppvObject) WrapLogMsg("*ppvObject=%p\n", *ppvObject);
345 WrapLogExit("CMenuDeskBarWrap::QueryService() = %08x\n", hr);
346 return hr;
347 }
348
349 // *** IInputObjectSite methods ***
350 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::OnFocusChangeIS(LPUNKNOWN lpUnknown, BOOL bFocus)
351 {
352 WrapLogEnter("CMenuDeskBarWrap<%p>::OnFocusChangeIS(LPUNKNOWN lpUnknown=%p, BOOL bFocus=%d)\n", this, lpUnknown, bFocus);
353 HRESULT hr = m_IInputObjectSite->OnFocusChangeIS(lpUnknown, bFocus);
354 WrapLogExit("CMenuDeskBarWrap::OnFocusChangeIS() = %08x\n", hr);
355 return hr;
356 }
357
358 // *** IInputObject methods ***
359 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::UIActivateIO(BOOL bActivating, LPMSG lpMsg)
360 {
361 WrapLogEnter("CMenuDeskBarWrap<%p>::UIActivateIO(BOOL bActivating=%d, LPMSG lpMsg=%p)\n", this, bActivating, lpMsg);
362 HRESULT hr = m_IInputObject->UIActivateIO(bActivating, lpMsg);
363 WrapLogExit("CMenuDeskBarWrap::UIActivateIO() = %08x\n", hr);
364 return hr;
365 }
366
367 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::HasFocusIO(THIS)
368 {
369 WrapLogEnter("CMenuDeskBarWrap<%p>::HasFocusIO()\n", this);
370 HRESULT hr = m_IInputObject->HasFocusIO();
371 WrapLogExit("CMenuDeskBarWrap::HasFocusIO() = %08x\n", hr);
372 return hr;
373 }
374
375 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::TranslateAcceleratorIO(LPMSG lpMsg)
376 {
377 WrapLogEnter("CMenuDeskBarWrap<%p>::TranslateAcceleratorIO(LPMSG lpMsg=%p)\n", this, lpMsg);
378 if (lpMsg) WrapLogMsg("*lpMsg=%s\n", Wrap(*lpMsg));
379 HRESULT hr = m_IInputObject->TranslateAcceleratorIO(lpMsg);
380 WrapLogExit("CMenuDeskBarWrap::TranslateAcceleratorIO() = %08x\n", hr);
381 return hr;
382 }
383
384 // *** IDeskBar methods ***
385 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::SetClient(IUnknown *punkClient)
386 {
387 WrapLogEnter("CMenuDeskBarWrap<%p>::SetClient(IUnknown *punkClient=%p)\n", this, punkClient);
388 HRESULT hr = m_IDeskBar->SetClient(punkClient);
389 WrapLogExit("CMenuDeskBarWrap::SetClient() = %08x\n", hr);
390
391 CComPtr<IDeskBarClient> dbc;
392 punkClient->QueryInterface(IID_PPV_ARG(IDeskBarClient, &dbc));
393 dbc->SetDeskBarSite(static_cast<IDeskBar*>(this));
394
395 return hr;
396 }
397
398 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::GetClient(IUnknown **ppunkClient)
399 {
400 WrapLogEnter("CMenuDeskBarWrap<%p>::GetClient(IUnknown **ppunkClient=%p)\n", this, ppunkClient);
401 HRESULT hr = m_IDeskBar->GetClient(ppunkClient);
402 if (ppunkClient) WrapLogMsg("*ppunkClient=%p\n", *ppunkClient);
403 WrapLogExit("CMenuDeskBarWrap::GetClient() = %08x\n", hr);
404 return hr;
405 }
406
407 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::OnPosRectChangeDB(LPRECT prc)
408 {
409 WrapLogEnter("CMenuDeskBarWrap<%p>::OnPosRectChangeDB(RECT *prc=%p)\n", this, prc);
410 HRESULT hr = m_IDeskBar->OnPosRectChangeDB(prc);
411 if (prc) WrapLogMsg("*prc=%s\n", Wrap(*prc));
412 WrapLogExit("CMenuDeskBarWrap::OnPosRectChangeDB() = %08x\n", hr);
413 return hr;
414 }