[RSHELL]
[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 CComObjectRootEx<CComMultiThreadModelNoCS>,
25 public IOleCommandTarget,
26 public IServiceProvider,
27 public IInputObjectSite,
28 public IInputObject,
29 public IMenuPopup,
30 public IObjectWithSite,
31 public IBanneredBar,
32 public IInitializeObject
33 {
34 public:
35 CMenuDeskBarWrap() {}
36 ~CMenuDeskBarWrap();
37
38 HRESULT InitWrap(IDeskBar * shellMenu);
39
40 private:
41 CComPtr<IMenuPopup > m_IMenuPopup;
42 CComPtr<IOleCommandTarget > m_IOleCommandTarget;
43 CComPtr<IServiceProvider > m_IServiceProvider;
44 CComPtr<IDeskBar > m_IDeskBar;
45 CComPtr<IOleWindow > m_IOleWindow;
46 CComPtr<IInputObjectSite > m_IInputObjectSite;
47 CComPtr<IInputObject > m_IInputObject;
48 CComPtr<IObjectWithSite > m_IObjectWithSite;
49 CComPtr<IBanneredBar > m_IBanneredBar;
50 CComPtr<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 WINAPI CMenuDeskBar_Wrapper(IDeskBar * deskBar, REFIID riid, LPVOID *ppv)
114 {
115 HRESULT hr;
116
117 *ppv = NULL;
118
119 CMenuDeskBarWrap * bar = new CComObject<CMenuDeskBarWrap>();
120 if (!bar)
121 return E_OUTOFMEMORY;
122
123 hr = bar->InitWrap(deskBar);
124 if (FAILED(hr))
125 {
126 bar->Release();
127 return hr;
128 }
129
130 hr = bar->QueryInterface(riid, ppv);
131
132 if (FAILED(hr))
133 bar->Release();
134
135 return hr;
136 }
137
138 HRESULT CMenuDeskBarWrap::InitWrap(IDeskBar * deskBar)
139 {
140 HRESULT hr;
141
142 WrapLogOpen();
143
144 m_IDeskBar = deskBar;
145
146 hr = deskBar->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &m_IOleCommandTarget));
147 if (FAILED(hr)) return hr;
148 hr = deskBar->QueryInterface(IID_PPV_ARG(IServiceProvider, &m_IServiceProvider));
149 if (FAILED(hr)) return hr;
150 hr = deskBar->QueryInterface(IID_PPV_ARG(IMenuPopup, &m_IMenuPopup));
151 if (FAILED(hr)) return hr;
152 hr = deskBar->QueryInterface(IID_PPV_ARG(IOleWindow, &m_IOleWindow));
153 if (FAILED(hr)) return hr;
154 hr = deskBar->QueryInterface(IID_PPV_ARG(IInputObjectSite, &m_IInputObjectSite));
155 if (FAILED(hr)) return hr;
156 hr = deskBar->QueryInterface(IID_PPV_ARG(IInputObject, &m_IInputObject));
157 if (FAILED(hr)) return hr;
158 hr = deskBar->QueryInterface(IID_PPV_ARG(IObjectWithSite, &m_IObjectWithSite));
159 if (FAILED(hr)) return hr;
160 hr = deskBar->QueryInterface(IID_PPV_ARG(IBanneredBar, &m_IBanneredBar));
161 if (FAILED(hr)) return hr;
162 hr = deskBar->QueryInterface(IID_PPV_ARG(IInitializeObject, &m_IInitializeObject));
163 return hr;
164 }
165
166 CMenuDeskBarWrap::~CMenuDeskBarWrap()
167 {
168 WrapLogClose();
169 }
170
171 // *** IMenuPopup methods ***
172 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::Popup(POINTL *ppt, RECTL *prcExclude, MP_POPUPFLAGS dwFlags)
173 {
174 WrapLogEnter("CMenuDeskBarWrap<%p>::Popup(POINTL *ppt=%p, RECTL *prcExclude=%p, MP_POPUPFLAGS dwFlags=%08x)\n", this, ppt, prcExclude, dwFlags);
175 HRESULT hr = m_IMenuPopup->Popup(ppt, prcExclude, dwFlags);
176 WrapLogExit("CMenuDeskBarWrap::Popup()", hr);
177 return hr;
178 }
179
180 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::OnSelect(DWORD dwSelectType)
181 {
182 WrapLogEnter("CMenuDeskBarWrap<%p>::OnSelect(DWORD dwSelectType=%08x)\n", this, dwSelectType);
183 HRESULT hr = m_IMenuPopup->OnSelect(dwSelectType);
184 WrapLogExit("CMenuDeskBarWrap::OnSelect()", hr);
185 return hr;
186 }
187
188 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::SetSubMenu(IMenuPopup *pmp, BOOL fSet)
189 {
190 WrapLogEnter("CMenuDeskBarWrap<%p>::SetSubMenu(IMenuPopup *pmp=%p, BOOL fSet=%d)\n", this, pmp, fSet);
191 HRESULT hr = m_IMenuPopup->SetSubMenu(pmp, fSet);
192 WrapLogExit("CMenuDeskBarWrap::SetSubMenu()", hr);
193 return hr;
194 }
195
196 // *** IOleWindow methods ***
197 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::GetWindow(HWND *phwnd)
198 {
199 WrapLogEnter("CMenuDeskBarWrap<%p>::GetWindow(HWND *phwnd=%p)\n", this, phwnd);
200 HRESULT hr = m_IOleWindow->GetWindow(phwnd);
201 if (phwnd) WrapLogPost("*phwnd=%p\n", *phwnd);
202 WrapLogExit("CMenuDeskBarWrap::GetWindow()", hr);
203 return hr;
204 }
205
206 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::ContextSensitiveHelp(BOOL fEnterMode)
207 {
208 WrapLogEnter("CMenuDeskBarWrap<%p>::ContextSensitiveHelp(BOOL fEnterMode=%d)\n", this, fEnterMode);
209 HRESULT hr = m_IOleWindow->ContextSensitiveHelp(fEnterMode);
210 WrapLogExit("CMenuDeskBarWrap::ContextSensitiveHelp()", hr);
211 return hr;
212 }
213
214 // *** IObjectWithSite methods ***
215 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::SetSite(IUnknown *pUnkSite)
216 {
217 WrapLogEnter("CMenuDeskBarWrap<%p>::SetSite(IUnknown *pUnkSite=%p)\n", this, pUnkSite);
218
219 #if WRAP_TRAYPRIV
220 CComPtr<ITrayPriv> inTp;
221 HRESULT hr2 = pUnkSite->QueryInterface(IID_PPV_ARG(ITrayPriv, &inTp));
222 if (SUCCEEDED(hr2))
223 {
224 ITrayPriv * outTp;
225 hr2 = CStartMenuSite_Wrapper(inTp, IID_PPV_ARG(ITrayPriv, &outTp));
226 if (SUCCEEDED(hr2))
227 {
228 pUnkSite = outTp;
229 }
230 else
231 {
232 outTp->Release();
233 }
234 }
235 #endif
236 HRESULT hr = m_IObjectWithSite->SetSite(pUnkSite);
237 WrapLogExit("CMenuDeskBarWrap::SetSite()", hr);
238 return hr;
239 }
240
241 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::GetSite(REFIID riid, PVOID *ppvSite)
242 {
243 WrapLogEnter("CMenuDeskBarWrap<%p>::GetSite(REFIID riid=%s, PVOID *ppvSite=%p)\n", this, Wrap(riid), ppvSite);
244 HRESULT hr = m_IObjectWithSite->GetSite(riid, ppvSite);
245 if (ppvSite) WrapLogPost("*ppvSite=%p\n", *ppvSite);
246 WrapLogExit("CMenuDeskBarWrap::GetSite()", hr);
247 return hr;
248 }
249
250 // *** IBanneredBar methods ***
251 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::SetIconSize(DWORD iIcon)
252 {
253 WrapLogEnter("CMenuDeskBarWrap<%p>::SetIconSize(DWORD iIcon=%d)\n", this, iIcon);
254 HRESULT hr = m_IBanneredBar->SetIconSize(iIcon);
255 WrapLogExit("CMenuDeskBarWrap::SetIconSize()", hr);
256 return hr;
257 }
258
259 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::GetIconSize(DWORD* piIcon)
260 {
261 WrapLogEnter("CMenuDeskBarWrap<%p>::GetIconSize(DWORD* piIcon=%p)\n", this, piIcon);
262 HRESULT hr = m_IBanneredBar->GetIconSize(piIcon);
263 if (piIcon) WrapLogPost("*piIcon=%d\n", *piIcon);
264 WrapLogExit("CMenuDeskBarWrap::GetIconSize()", hr);
265 return hr;
266 }
267
268 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::SetBitmap(HBITMAP hBitmap)
269 {
270 WrapLogEnter("CMenuDeskBarWrap<%p>::SetBitmap(HBITMAP hBitmap=%p)\n", this, hBitmap);
271 HRESULT hr = m_IBanneredBar->SetBitmap(hBitmap);
272 WrapLogExit("CMenuDeskBarWrap::SetBitmap()", hr);
273 return hr;
274 }
275
276 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::GetBitmap(HBITMAP* phBitmap)
277 {
278 WrapLogEnter("CMenuDeskBarWrap<%p>::GetBitmap(HBITMAP* phBitmap=%p)\n", this, phBitmap);
279 HRESULT hr = m_IBanneredBar->GetBitmap(phBitmap);
280 if (phBitmap) WrapLogPost("*phBitmap=%p\n", *phBitmap);
281 WrapLogExit("CMenuDeskBarWrap::GetBitmap()", hr);
282 return hr;
283 }
284
285
286 // *** IInitializeObject methods ***
287 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::Initialize(THIS)
288 {
289 WrapLogEnter("CMenuDeskBarWrap<%p>::Initialize()\n", this);
290 HRESULT hr = m_IInitializeObject->Initialize();
291 WrapLogExit("CMenuDeskBarWrap::Initialize()", hr);
292 return hr;
293 }
294
295 // *** IOleCommandTarget methods ***
296 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText)
297 {
298 WrapLogEnter("CMenuDeskBarWrap<%p>::QueryStatus(const GUID *pguidCmdGroup=%p, ULONG cCmds=%u, prgCmds=%p, pCmdText=%p)\n", this, pguidCmdGroup, cCmds, prgCmds, pCmdText);
299 HRESULT hr = m_IOleCommandTarget->QueryStatus(pguidCmdGroup, cCmds, prgCmds, pCmdText);
300 if (pguidCmdGroup) WrapLogPost("*pguidCmdGroup=%s\n", Wrap(*pguidCmdGroup));
301 WrapLogExit("CMenuDeskBarWrap::QueryStatus()", hr);
302 return hr;
303 }
304
305 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
306 {
307 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);
308 if (pguidCmdGroup) WrapLogPost("*pguidCmdGroup=%s\n", Wrap(*pguidCmdGroup));
309 HRESULT hr = m_IOleCommandTarget->Exec(pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);
310 WrapLogExit("CMenuDeskBarWrap::Exec()", hr);
311 return hr;
312 }
313
314 // *** IServiceProvider methods ***
315 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::QueryService(REFGUID guidService, REFIID riid, void **ppvObject)
316 {
317 WrapLogEnter("CMenuDeskBarWrap<%p>::QueryService(REFGUID guidService=%s, REFIID riid=%s, void **ppvObject=%p)\n", this, Wrap(guidService), Wrap(riid), ppvObject);
318
319 if (IsEqualIID(guidService, SID_SMenuPopup))
320 {
321 WrapLogPre("SID is SID_SMenuPopup. Using QueryInterface of self instead of wrapped object.\n");
322 HRESULT hr = this->QueryInterface(riid, ppvObject);
323 if (SUCCEEDED(hr))
324 {
325 if (ppvObject) WrapLogPost("*ppvObject=%p\n", *ppvObject);
326 WrapLogExit("CMenuDeskBarWrap::QueryService()", hr);
327 return hr;
328 }
329 else
330 {
331 WrapLogPre("QueryInterface on wrapper failed. Handing over to innter object.\n");
332 }
333 }
334 else if (IsEqualIID(guidService, SID_SMenuBandParent))
335 {
336 WrapLogPre("SID is SID_SMenuBandParent. Using QueryInterface of self instead of wrapped object.\n");
337 HRESULT hr = this->QueryInterface(riid, ppvObject);
338 if (SUCCEEDED(hr))
339 {
340 if (ppvObject) WrapLogPost("*ppvObject=%p\n", *ppvObject);
341 WrapLogExit("CMenuDeskBarWrap::QueryService()", hr);
342 return hr;
343 }
344 else
345 {
346 WrapLogPre("QueryInterface on wrapper failed. Handing over to innter object.\n");
347 }
348 }
349 else if (IsEqualIID(guidService, SID_STopLevelBrowser))
350 {
351 WrapLogPre("SID is SID_STopLevelBrowser. Using QueryInterface of self instead of wrapped object.\n");
352 HRESULT hr = this->QueryInterface(riid, ppvObject);
353 if (SUCCEEDED(hr))
354 {
355 if (ppvObject) WrapLogPost("*ppvObject=%p\n", *ppvObject);
356 WrapLogExit("CMenuDeskBarWrap::QueryService()", hr);
357 return hr;
358 }
359 else
360 {
361 WrapLogPre("QueryInterface on wrapper failed. Handing over to innter object.\n");
362 }
363 }
364 else
365 {
366 WrapLogPre("SID not identified. Calling wrapped object's QueryService.\n");
367 }
368 HRESULT hr = m_IServiceProvider->QueryService(guidService, riid, ppvObject);
369 if (ppvObject) WrapLogPost("*ppvObject=%p\n", *ppvObject);
370 WrapLogExit("CMenuDeskBarWrap::QueryService()", hr);
371 return hr;
372 }
373
374 // *** IInputObjectSite methods ***
375 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::OnFocusChangeIS(LPUNKNOWN lpUnknown, BOOL bFocus)
376 {
377 WrapLogEnter("CMenuDeskBarWrap<%p>::OnFocusChangeIS(LPUNKNOWN lpUnknown=%p, BOOL bFocus=%d)\n", this, lpUnknown, bFocus);
378 HRESULT hr = m_IInputObjectSite->OnFocusChangeIS(lpUnknown, bFocus);
379 WrapLogExit("CMenuDeskBarWrap::OnFocusChangeIS()", hr);
380 return hr;
381 }
382
383 // *** IInputObject methods ***
384 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::UIActivateIO(BOOL bActivating, LPMSG lpMsg)
385 {
386 WrapLogEnter("CMenuDeskBarWrap<%p>::UIActivateIO(BOOL bActivating=%d, LPMSG lpMsg=%p)\n", this, bActivating, lpMsg);
387 HRESULT hr = m_IInputObject->UIActivateIO(bActivating, lpMsg);
388 WrapLogExit("CMenuDeskBarWrap::UIActivateIO()", hr);
389 return hr;
390 }
391
392 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::HasFocusIO(THIS)
393 {
394 WrapLogEnter("CMenuDeskBarWrap<%p>::HasFocusIO()\n", this);
395 HRESULT hr = m_IInputObject->HasFocusIO();
396 WrapLogExit("CMenuDeskBarWrap::HasFocusIO()", hr);
397 return hr;
398 }
399
400 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::TranslateAcceleratorIO(LPMSG lpMsg)
401 {
402 WrapLogEnter("CMenuDeskBarWrap<%p>::TranslateAcceleratorIO(LPMSG lpMsg=%p)\n", this, lpMsg);
403 if (lpMsg) WrapLogPre("*lpMsg=%s\n", Wrap(*lpMsg));
404 HRESULT hr = m_IInputObject->TranslateAcceleratorIO(lpMsg);
405 WrapLogExit("CMenuDeskBarWrap::TranslateAcceleratorIO()", hr);
406 return hr;
407 }
408
409 // *** IDeskBar methods ***
410 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::SetClient(IUnknown *punkClient)
411 {
412 WrapLogEnter("CMenuDeskBarWrap<%p>::SetClient(IUnknown *punkClient=%p)\n", this, punkClient);
413 HRESULT hr = m_IDeskBar->SetClient(punkClient);
414 WrapLogExit("CMenuDeskBarWrap::SetClient()", hr);
415
416 CComPtr<IDeskBarClient> dbc;
417 punkClient->QueryInterface(IID_PPV_ARG(IDeskBarClient, &dbc));
418 dbc->SetDeskBarSite(static_cast<IDeskBar*>(this));
419
420 return hr;
421 }
422
423 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::GetClient(IUnknown **ppunkClient)
424 {
425 WrapLogEnter("CMenuDeskBarWrap<%p>::GetClient(IUnknown **ppunkClient=%p)\n", this, ppunkClient);
426 HRESULT hr = m_IDeskBar->GetClient(ppunkClient);
427 if (ppunkClient) WrapLogPost("*ppunkClient=%p\n", *ppunkClient);
428 WrapLogExit("CMenuDeskBarWrap::GetClient()", hr);
429 return hr;
430 }
431
432 HRESULT STDMETHODCALLTYPE CMenuDeskBarWrap::OnPosRectChangeDB(LPRECT prc)
433 {
434 WrapLogEnter("CMenuDeskBarWrap<%p>::OnPosRectChangeDB(RECT *prc=%p)\n", this, prc);
435 HRESULT hr = m_IDeskBar->OnPosRectChangeDB(prc);
436 if (prc) WrapLogPost("*prc=%s\n", Wrap(*prc));
437 WrapLogExit("CMenuDeskBarWrap::OnPosRectChangeDB()", hr);
438 return hr;
439 }