2 * Copyright 2014 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #define WIN32_LEAN_AND_MEAN
26 #include "wine/test.h"
28 #define DEFINE_EXPECT(func) \
29 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
31 #define SET_EXPECT(func) \
32 expect_ ## func = TRUE
34 #define CHECK_EXPECT2(func) \
36 ok(expect_ ##func, "unexpected call " #func "\n"); \
37 called_ ## func = TRUE; \
40 #define CHECK_EXPECT(func) \
42 CHECK_EXPECT2(func); \
43 expect_ ## func = FALSE; \
46 #define CHECK_CALLED(func) \
48 ok(called_ ## func, "expected " #func "\n"); \
49 expect_ ## func = called_ ## func = FALSE; \
52 DEFINE_EXPECT(GetContainer
);
53 DEFINE_EXPECT(GetExtendedControl
);
54 DEFINE_EXPECT(GetWindow
);
55 DEFINE_EXPECT(Invoke_USERMODE
);
56 DEFINE_EXPECT(CanWindowlessActivate
);
57 DEFINE_EXPECT(OnInPlaceActivateEx
);
58 DEFINE_EXPECT(OnInPlaceDeactivate
);
59 DEFINE_EXPECT(GetWindowContext
);
60 DEFINE_EXPECT(ShowObject
);
61 DEFINE_EXPECT(OnShowWindow_FALSE
);
63 static HWND container_hwnd
;
65 static HRESULT WINAPI
OleContainer_QueryInterface(IOleContainer
*iface
, REFIID riid
, void **ppv
)
67 if(IsEqualGUID(riid
, &IID_IUnknown
)) {
69 }else if(IsEqualGUID(riid
, &IID_IOleContainer
)) {
72 trace("OleContainer QI(%s)\n", wine_dbgstr_guid(riid
));
80 static ULONG WINAPI
OleContainer_AddRef(IOleContainer
*iface
)
85 static ULONG WINAPI
OleContainer_Release(IOleContainer
*iface
)
90 static HRESULT WINAPI
OleContainer_ParseDisplayName(IOleContainer
*iface
, IBindCtx
*pbc
,
91 LPOLESTR pszDiaplayName
, ULONG
*pchEaten
, IMoniker
**ppmkOut
)
93 ok(0, "unexpected call\n");
97 static HRESULT WINAPI
OleContainer_EnumObjects(IOleContainer
*iface
, DWORD grfFlags
,
98 IEnumUnknown
**ppenum
)
100 ok(0, "unexpected call\n");
104 static HRESULT WINAPI
OleContainer_LockContainer(IOleContainer
*iface
, BOOL fLock
)
106 ok(0, "unexpected call\n");
110 static const IOleContainerVtbl OleContainerVtbl
= {
111 OleContainer_QueryInterface
,
113 OleContainer_Release
,
114 OleContainer_ParseDisplayName
,
115 OleContainer_EnumObjects
,
116 OleContainer_LockContainer
119 static IOleContainer OleContainer
= { &OleContainerVtbl
};
121 static HRESULT WINAPI
InPlaceFrame_QueryInterface(IOleInPlaceFrame
*iface
, REFIID riid
, void **ppv
)
123 ok(0, "Unexpected QI(%s)\n", wine_dbgstr_guid(riid
));
125 return E_NOINTERFACE
;
128 static ULONG WINAPI
InPlaceFrame_AddRef(IOleInPlaceFrame
*iface
)
133 static ULONG WINAPI
InPlaceFrame_Release(IOleInPlaceFrame
*iface
)
138 static HRESULT WINAPI
InPlaceFrame_GetWindow(IOleInPlaceFrame
*iface
, HWND
*phwnd
)
140 ok(0, "unexpected call\n");
144 static HRESULT WINAPI
InPlaceFrame_ContextSensitiveHelp(IOleInPlaceFrame
*iface
, BOOL fEnterMode
)
146 ok(0, "unexpected call\n");
150 static HRESULT WINAPI
InPlaceFrame_GetBorder(IOleInPlaceFrame
*iface
, LPRECT lprectBorder
)
152 ok(0, "unexpected call\n");
156 static HRESULT WINAPI
InPlaceFrame_RequestBorderSpace(IOleInPlaceFrame
*iface
,
157 LPCBORDERWIDTHS pborderwidths
)
159 ok(0, "unexpected call\n");
163 static HRESULT WINAPI
InPlaceFrame_SetBorderSpace(IOleInPlaceFrame
*iface
,
164 LPCBORDERWIDTHS pborderwidths
)
166 ok(0, "unexpected call\n");
170 static HRESULT WINAPI
InPlaceUIWindow_SetActiveObject(IOleInPlaceFrame
*iface
,
171 IOleInPlaceActiveObject
*pActiveObject
, LPCOLESTR pszObjName
)
173 ok(0, "unexpected call\n");
177 static HRESULT WINAPI
InPlaceFrame_SetActiveObject(IOleInPlaceFrame
*iface
,
178 IOleInPlaceActiveObject
*pActiveObject
, LPCOLESTR pszObjName
)
180 ok(0, "unexpected call\n");
184 static HRESULT WINAPI
InPlaceFrame_InsertMenus(IOleInPlaceFrame
*iface
, HMENU hmenuShared
,
185 LPOLEMENUGROUPWIDTHS lpMenuWidths
)
187 ok(0, "unexpected call\n");
191 static HRESULT WINAPI
InPlaceFrame_SetMenu(IOleInPlaceFrame
*iface
, HMENU hmenuShared
,
192 HOLEMENU holemenu
, HWND hwndActiveObject
)
194 ok(0, "unexpected call\n");
198 static HRESULT WINAPI
InPlaceFrame_RemoveMenus(IOleInPlaceFrame
*iface
, HMENU hmenuShared
)
200 ok(0, "unexpected call\n");
204 static HRESULT WINAPI
InPlaceFrame_SetStatusText(IOleInPlaceFrame
*iface
, LPCOLESTR pszStatusText
)
206 ok(0, "unexpected call\n");
210 static HRESULT WINAPI
InPlaceFrame_EnableModeless(IOleInPlaceFrame
*iface
, BOOL fEnable
)
212 ok(0, "unexpected call\n");
216 static HRESULT WINAPI
InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame
*iface
, LPMSG lpmsg
, WORD wID
)
218 ok(0, "unexpected call\n");
222 static const IOleInPlaceFrameVtbl InPlaceFrameVtbl
= {
223 InPlaceFrame_QueryInterface
,
225 InPlaceFrame_Release
,
226 InPlaceFrame_GetWindow
,
227 InPlaceFrame_ContextSensitiveHelp
,
228 InPlaceFrame_GetBorder
,
229 InPlaceFrame_RequestBorderSpace
,
230 InPlaceFrame_SetBorderSpace
,
231 InPlaceFrame_SetActiveObject
,
232 InPlaceFrame_InsertMenus
,
233 InPlaceFrame_SetMenu
,
234 InPlaceFrame_RemoveMenus
,
235 InPlaceFrame_SetStatusText
,
236 InPlaceFrame_EnableModeless
,
237 InPlaceFrame_TranslateAccelerator
240 static IOleInPlaceFrame InPlaceFrame
= { &InPlaceFrameVtbl
};
242 static const IOleInPlaceFrameVtbl InPlaceUIWindowVtbl
= {
243 InPlaceFrame_QueryInterface
,
245 InPlaceFrame_Release
,
246 InPlaceFrame_GetWindow
,
247 InPlaceFrame_ContextSensitiveHelp
,
248 InPlaceFrame_GetBorder
,
249 InPlaceFrame_RequestBorderSpace
,
250 InPlaceFrame_SetBorderSpace
,
251 InPlaceUIWindow_SetActiveObject
,
254 static IOleInPlaceFrame InPlaceUIWindow
= { &InPlaceUIWindowVtbl
};
256 static HRESULT
cs_qi(REFIID
,void**);
258 static HRESULT WINAPI
ClientSite_QueryInterface(IOleClientSite
*iface
, REFIID riid
, void **ppv
)
260 return cs_qi(riid
, ppv
);
263 static ULONG WINAPI
ClientSite_AddRef(IOleClientSite
*iface
)
268 static ULONG WINAPI
ClientSite_Release(IOleClientSite
*iface
)
273 static HRESULT WINAPI
ClientSite_SaveObject(IOleClientSite
*iface
)
275 ok(0, "unexpected call\n");
279 static HRESULT WINAPI
ClientSite_GetMoniker(IOleClientSite
*iface
, DWORD dwAssign
, DWORD dwWhichMoniker
,
282 ok(0, "unexpected call\n");
286 static HRESULT WINAPI
ClientSite_GetContainer(IOleClientSite
*iface
, IOleContainer
**ppContainer
)
288 CHECK_EXPECT2(GetContainer
);
290 *ppContainer
= &OleContainer
;
294 static HRESULT WINAPI
ClientSite_ShowObject(IOleClientSite
*iface
)
296 CHECK_EXPECT(ShowObject
);
300 static HRESULT WINAPI
ClientSite_OnShowWindow(IOleClientSite
*iface
, BOOL fShow
)
303 ok(0, "unexpected call\n");
305 CHECK_EXPECT(OnShowWindow_FALSE
);
309 static HRESULT WINAPI
ClientSite_RequestNewObjectLayout(IOleClientSite
*iface
)
311 ok(0, "unexpected call\n");
315 static const IOleClientSiteVtbl ClientSiteVtbl
= {
316 ClientSite_QueryInterface
,
319 ClientSite_SaveObject
,
320 ClientSite_GetMoniker
,
321 ClientSite_GetContainer
,
322 ClientSite_ShowObject
,
323 ClientSite_OnShowWindow
,
324 ClientSite_RequestNewObjectLayout
327 static IOleClientSite ClientSite
= { &ClientSiteVtbl
};
329 static HRESULT WINAPI
ServiceProvider_QueryInterface(IServiceProvider
*iface
,
330 REFIID riid
, void **ppv
)
332 return cs_qi(riid
, ppv
);
335 static ULONG WINAPI
ServiceProvider_AddRef(IServiceProvider
*iface
)
340 static ULONG WINAPI
ServiceProvider_Release(IServiceProvider
*iface
)
345 static HRESULT WINAPI
ServiceProvider_QueryService(IServiceProvider
*iface
, REFGUID guidService
,
346 REFIID riid
, void **ppv
)
348 trace("QS(%s)\n", wine_dbgstr_guid(guidService
));
350 return E_NOINTERFACE
;
353 static const IServiceProviderVtbl ServiceProviderVtbl
= {
354 ServiceProvider_QueryInterface
,
355 ServiceProvider_AddRef
,
356 ServiceProvider_Release
,
357 ServiceProvider_QueryService
360 static IServiceProvider ServiceProvider
= { &ServiceProviderVtbl
};
362 static HRESULT WINAPI
OleControlSite_QueryInterface(IOleControlSite
*iface
, REFIID riid
, void **ppv
)
364 return cs_qi(riid
, ppv
);
367 static ULONG WINAPI
OleControlSite_AddRef(IOleControlSite
*iface
)
372 static ULONG WINAPI
OleControlSite_Release(IOleControlSite
*iface
)
377 static HRESULT WINAPI
OleControlSite_OnControlInfoChanged(IOleControlSite
*iface
)
379 ok(0, "unexpected call\n");
383 static HRESULT WINAPI
OleControlSite_LockInPlaceActive(IOleControlSite
*iface
, BOOL fLock
)
385 ok(0, "unexpected call\n");
389 static HRESULT WINAPI
OleControlSite_GetExtendedControl(IOleControlSite
*iface
, IDispatch
**ppDisp
)
391 CHECK_EXPECT(GetExtendedControl
);
395 static HRESULT WINAPI
OleControlSite_TransformCoords(IOleControlSite
*iface
, POINTL
*pPtHimetric
,
396 POINTF
*pPtfContainer
, DWORD dwFlags
)
398 ok(0, "unexpected call\n");
402 static HRESULT WINAPI
OleControlSite_TranslateAccelerator(IOleControlSite
*iface
,
403 MSG
*pMsg
, DWORD grfModifiers
)
405 ok(0, "unexpected call\n");
409 static HRESULT WINAPI
OleControlSite_OnFocus(IOleControlSite
*iface
, BOOL fGotFocus
)
411 ok(0, "unexpected call\n");
415 static HRESULT WINAPI
OleControlSite_ShowPropertyFrame(IOleControlSite
*iface
)
417 ok(0, "unexpected call\n");
421 static const IOleControlSiteVtbl OleControlSiteVtbl
= {
422 OleControlSite_QueryInterface
,
423 OleControlSite_AddRef
,
424 OleControlSite_Release
,
425 OleControlSite_OnControlInfoChanged
,
426 OleControlSite_LockInPlaceActive
,
427 OleControlSite_GetExtendedControl
,
428 OleControlSite_TransformCoords
,
429 OleControlSite_TranslateAccelerator
,
430 OleControlSite_OnFocus
,
431 OleControlSite_ShowPropertyFrame
434 static IOleControlSite OleControlSite
= { &OleControlSiteVtbl
};
436 static HRESULT WINAPI
Dispatch_QueryInterface(IDispatch
*iface
, REFIID riid
, void **ppv
)
438 return cs_qi(riid
, ppv
);
441 static ULONG WINAPI
Dispatch_AddRef(IDispatch
*iface
)
446 static ULONG WINAPI
Dispatch_Release(IDispatch
*iface
)
451 static HRESULT WINAPI
Dispatch_GetTypeInfoCount(IDispatch
*iface
, UINT
*pctinfo
)
453 ok(0, "unexpected call\n");
457 static HRESULT WINAPI
Dispatch_GetTypeInfo(IDispatch
*iface
, UINT iTInfo
, LCID lcid
,
460 ok(0, "unexpected call\n");
464 static HRESULT WINAPI
Dispatch_GetIDsOfNames(IDispatch
*iface
, REFIID riid
, LPOLESTR
*rgszNames
,
465 UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
467 ok(0, "unexpected call\n");
471 static HRESULT WINAPI
Dispatch_Invoke(IDispatch
*iface
, DISPID dispIdMember
, REFIID riid
,
472 LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
473 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
475 switch(dispIdMember
) {
476 case DISPID_AMBIENT_USERMODE
:
477 CHECK_EXPECT(Invoke_USERMODE
);
480 ok(0, "unexpected call Invoke(%d)\n", dispIdMember
);
486 static const IDispatchVtbl DispatchVtbl
= {
487 Dispatch_QueryInterface
,
490 Dispatch_GetTypeInfoCount
,
491 Dispatch_GetTypeInfo
,
492 Dispatch_GetIDsOfNames
,
496 static IDispatch Dispatch
= { &DispatchVtbl
};
498 static HRESULT WINAPI
InPlaceSiteWindowless_QueryInterface(IOleInPlaceSiteWindowless
*iface
, REFIID riid
, void **ppv
)
500 return cs_qi(riid
, ppv
);
503 static ULONG WINAPI
InPlaceSiteWindowless_AddRef(IOleInPlaceSiteWindowless
*iface
)
508 static ULONG WINAPI
InPlaceSiteWindowless_Release(IOleInPlaceSiteWindowless
*iface
)
513 static HRESULT WINAPI
InPlaceSiteWindowless_GetWindow(IOleInPlaceSiteWindowless
*iface
, HWND
*phwnd
)
515 CHECK_EXPECT2(GetWindow
);
516 *phwnd
= container_hwnd
;
520 static HRESULT WINAPI
InPlaceSiteWindowless_ContextSensitiveHelp(IOleInPlaceSiteWindowless
*iface
, BOOL fEnterMode
)
522 ok(0, "unexpected call\n");
526 static HRESULT WINAPI
InPlaceSiteWindowless_CanInPlaceActivate(IOleInPlaceSiteWindowless
*iface
)
528 ok(0, "unexpected call\n");
532 static HRESULT WINAPI
InPlaceSiteWindowless_OnInPlaceActivate(IOleInPlaceSiteWindowless
*iface
)
534 ok(0, "unexpected call\n");
538 static HRESULT WINAPI
InPlaceSiteWindowless_OnUIActivate(IOleInPlaceSiteWindowless
*iface
)
540 ok(0, "unexpected call\n");
544 static HRESULT WINAPI
InPlaceSiteWindowless_GetWindowContext(IOleInPlaceSiteWindowless
*iface
, IOleInPlaceFrame
**ppFrame
,
545 IOleInPlaceUIWindow
**ppDoc
, LPRECT lprcPosRect
, LPRECT lprcClipRect
, LPOLEINPLACEFRAMEINFO lpFrameInfo
)
547 static const RECT rect
= {0,0,400,410};
549 CHECK_EXPECT(GetWindowContext
);
551 ok(ppFrame
!= NULL
, "ppFrame = NULL\n");
553 *ppFrame
= &InPlaceFrame
;
554 ok(ppDoc
!= NULL
, "ppDoc = NULL\n");
556 *ppDoc
= (IOleInPlaceUIWindow
*)&InPlaceUIWindow
;
557 ok(lprcPosRect
!= NULL
, "lprcPosRect = NULL\n");
559 memcpy(lprcPosRect
, &rect
, sizeof(RECT
));
560 ok(lprcClipRect
!= NULL
, "lprcClipRect = NULL\n");
562 memcpy(lprcClipRect
, &rect
, sizeof(RECT
));
563 ok(lpFrameInfo
!= NULL
, "lpFrameInfo = NULL\n");
565 ok(lpFrameInfo
->cb
== sizeof(*lpFrameInfo
), "lpFrameInfo->cb = %u, expected %u\n", lpFrameInfo
->cb
, (unsigned)sizeof(*lpFrameInfo
));
566 lpFrameInfo
->fMDIApp
= FALSE
;
567 lpFrameInfo
->hwndFrame
= container_hwnd
;
568 lpFrameInfo
->haccel
= NULL
;
569 lpFrameInfo
->cAccelEntries
= 0;
575 static HRESULT WINAPI
InPlaceSiteWindowless_Scroll(
576 IOleInPlaceSiteWindowless
*iface
, SIZE scrollExtent
)
578 ok(0, "unexpected call\n");
582 static HRESULT WINAPI
InPlaceSiteWindowless_OnUIDeactivate(
583 IOleInPlaceSiteWindowless
*iface
, BOOL fUndoable
)
585 ok(0, "unexpected call\n");
589 static HRESULT WINAPI
InPlaceSiteWindowless_OnInPlaceDeactivate(
590 IOleInPlaceSiteWindowless
*iface
)
592 CHECK_EXPECT(OnInPlaceDeactivate
);
596 static HRESULT WINAPI
InPlaceSiteWindowless_DiscardUndoState(
597 IOleInPlaceSiteWindowless
*iface
)
599 ok(0, "unexpected call\n");
603 static HRESULT WINAPI
InPlaceSiteWindowless_DeactivateAndUndo(
604 IOleInPlaceSiteWindowless
*iface
)
606 ok(0, "unexpected call\n");
610 static HRESULT WINAPI
InPlaceSiteWindowless_OnPosRectChange(
611 IOleInPlaceSiteWindowless
*iface
, LPCRECT lprcPosRect
)
613 ok(0, "unexpected call\n");
617 static HRESULT WINAPI
InPlaceSiteWindowless_OnInPlaceActivateEx(
618 IOleInPlaceSiteWindowless
*iface
, BOOL
*pfNoRedraw
, DWORD dwFlags
)
620 CHECK_EXPECT(OnInPlaceActivateEx
);
621 ok(!dwFlags
, "dwFlags = %x\n", dwFlags
);
622 ok(pfNoRedraw
!= NULL
, "pfNoRedraw = NULL\n");
626 static HRESULT WINAPI
InPlaceSiteWindowless_OnInPlaceDeactivateEx(
627 IOleInPlaceSiteWindowless
*iface
, BOOL fNoRedraw
)
629 ok(0, "unexpected call\n");
633 static HRESULT WINAPI
InPlaceSiteWindowless_RequestUIActivate(
634 IOleInPlaceSiteWindowless
*iface
)
636 ok(0, "unexpected call\n");
640 static HRESULT WINAPI
InPlaceSiteWindowless_CanWindowlessActivate(
641 IOleInPlaceSiteWindowless
*iface
)
643 CHECK_EXPECT(CanWindowlessActivate
);
647 static HRESULT WINAPI
InPlaceSiteWindowless_GetCapture(
648 IOleInPlaceSiteWindowless
*iface
)
650 ok(0, "unexpected call\n");
654 static HRESULT WINAPI
InPlaceSiteWindowless_SetCapture(
655 IOleInPlaceSiteWindowless
*iface
, BOOL fCapture
)
657 ok(0, "unexpected call\n");
661 static HRESULT WINAPI
InPlaceSiteWindowless_GetFocus(
662 IOleInPlaceSiteWindowless
*iface
)
664 ok(0, "unexpected call\n");
668 static HRESULT WINAPI
InPlaceSiteWindowless_SetFocus(
669 IOleInPlaceSiteWindowless
*iface
, BOOL fFocus
)
671 ok(0, "unexpected call\n");
675 static HRESULT WINAPI
InPlaceSiteWindowless_GetDC(
676 IOleInPlaceSiteWindowless
*iface
, LPCRECT pRect
,
677 DWORD grfFlags
, HDC
*phDC
)
679 ok(0, "unexpected call\n");
683 static HRESULT WINAPI
InPlaceSiteWindowless_ReleaseDC(
684 IOleInPlaceSiteWindowless
*iface
, HDC hDC
)
686 ok(0, "unexpected call\n");
690 static HRESULT WINAPI
InPlaceSiteWindowless_InvalidateRect(
691 IOleInPlaceSiteWindowless
*iface
, LPCRECT pRect
, BOOL fErase
)
693 ok(0, "unexpected call\n");
697 static HRESULT WINAPI
InPlaceSiteWindowless_InvalidateRgn(
698 IOleInPlaceSiteWindowless
*iface
, HRGN hRGN
, BOOL fErase
)
700 ok(0, "unexpected call\n");
704 static HRESULT WINAPI
InPlaceSiteWindowless_ScrollRect(
705 IOleInPlaceSiteWindowless
*iface
, INT dx
, INT dy
,
706 LPCRECT pRectScroll
, LPCRECT pRectClip
)
708 ok(0, "unexpected call\n");
712 static HRESULT WINAPI
InPlaceSiteWindowless_AdjustRect(
713 IOleInPlaceSiteWindowless
*iface
, LPRECT prc
)
715 ok(0, "unexpected call\n");
719 static HRESULT WINAPI
InPlaceSiteWindowless_OnDefWindowMessage(
720 IOleInPlaceSiteWindowless
*iface
, UINT msg
,
721 WPARAM wParam
, LPARAM lParam
, LRESULT
*plResult
)
723 ok(0, "unexpected call\n");
727 static const IOleInPlaceSiteWindowlessVtbl InPlaceSiteWindowlessVtbl
= {
728 InPlaceSiteWindowless_QueryInterface
,
729 InPlaceSiteWindowless_AddRef
,
730 InPlaceSiteWindowless_Release
,
731 InPlaceSiteWindowless_GetWindow
,
732 InPlaceSiteWindowless_ContextSensitiveHelp
,
733 InPlaceSiteWindowless_CanInPlaceActivate
,
734 InPlaceSiteWindowless_OnInPlaceActivate
,
735 InPlaceSiteWindowless_OnUIActivate
,
736 InPlaceSiteWindowless_GetWindowContext
,
737 InPlaceSiteWindowless_Scroll
,
738 InPlaceSiteWindowless_OnUIDeactivate
,
739 InPlaceSiteWindowless_OnInPlaceDeactivate
,
740 InPlaceSiteWindowless_DiscardUndoState
,
741 InPlaceSiteWindowless_DeactivateAndUndo
,
742 InPlaceSiteWindowless_OnPosRectChange
,
743 InPlaceSiteWindowless_OnInPlaceActivateEx
,
744 InPlaceSiteWindowless_OnInPlaceDeactivateEx
,
745 InPlaceSiteWindowless_RequestUIActivate
,
746 InPlaceSiteWindowless_CanWindowlessActivate
,
747 InPlaceSiteWindowless_GetCapture
,
748 InPlaceSiteWindowless_SetCapture
,
749 InPlaceSiteWindowless_GetFocus
,
750 InPlaceSiteWindowless_SetFocus
,
751 InPlaceSiteWindowless_GetDC
,
752 InPlaceSiteWindowless_ReleaseDC
,
753 InPlaceSiteWindowless_InvalidateRect
,
754 InPlaceSiteWindowless_InvalidateRgn
,
755 InPlaceSiteWindowless_ScrollRect
,
756 InPlaceSiteWindowless_AdjustRect
,
757 InPlaceSiteWindowless_OnDefWindowMessage
760 static IOleInPlaceSiteWindowless InPlaceSiteWindowless
= { &InPlaceSiteWindowlessVtbl
};
762 static HRESULT
cs_qi(REFIID riid
, void **ppv
)
764 if(IsEqualGUID(riid
, &IID_IUnknown
)) {
766 }else if(IsEqualGUID(riid
, &IID_IOleClientSite
)) {
768 }else if(IsEqualGUID(riid
, &IID_IServiceProvider
)) {
769 *ppv
= &ServiceProvider
;
770 }else if(IsEqualGUID(riid
, &IID_IOleControlSite
)) {
771 *ppv
= &OleControlSite
;
772 }else if(IsEqualGUID(riid
, &IID_IDispatch
)) {
774 }else if(IsEqualGUID(&IID_IOleWindow
, riid
)) {
775 *ppv
= &InPlaceSiteWindowless
;
776 }else if(IsEqualGUID(&IID_IOleInPlaceSite
, riid
)) {
777 *ppv
= &InPlaceSiteWindowless
;
778 }else if(IsEqualGUID(&IID_IOleInPlaceSiteEx
, riid
)) {
779 *ppv
= &InPlaceSiteWindowless
;
780 }else if(IsEqualGUID(&IID_IOleInPlaceSiteWindowless
, riid
)) {
781 *ppv
= &InPlaceSiteWindowless
;
783 trace("QI(%s)\n", wine_dbgstr_guid(riid
));
785 return E_NOINTERFACE
;
791 static void test_wmp_ifaces(IOleObject
*oleobj
)
793 IWMPSettings
*settings
, *settings_qi
;
794 IWMPPlayer4
*player4
;
797 hres
= IOleObject_QueryInterface(oleobj
, &IID_IWMPPlayer4
, (void**)&player4
);
798 ok(hres
== S_OK
, "Could not get IWMPPlayer4 iface: %08x\n", hres
);
801 hres
= IWMPPlayer4_get_settings(player4
, &settings
);
802 ok(hres
== S_OK
, "get_settings failed: %08x\n", hres
);
803 ok(settings
!= NULL
, "settings = NULL\n");
805 hres
= IOleObject_QueryInterface(oleobj
, &IID_IWMPSettings
, (void**)&settings_qi
);
806 ok(hres
== S_OK
, "Could not get IWMPSettings iface: %08x\n", hres
);
807 ok(settings
== settings_qi
, "settings != settings_qi\n");
808 IWMPSettings_Release(settings_qi
);
810 IWMPSettings_Release(settings
);
811 IWMPPlayer4_Release(player4
);
814 #define test_rect_size(a,b,c) _test_rect_size(__LINE__,a,b,c)
815 static void _test_rect_size(unsigned line
, const RECT
*r
, int width
, int height
)
817 ok_(__FILE__
,line
)(r
->right
-r
->left
== width
, "width = %d, expected %d\n", r
->right
-r
->left
, width
);
818 ok_(__FILE__
,line
)(r
->bottom
-r
->top
== height
, "height = %d, expected %d\n", r
->bottom
-r
->top
, height
);
821 static void test_window(HWND hwnd
)
823 WINDOWINFO wi
= {sizeof(wi
)};
824 char class_name
[100];
828 i
= RealGetWindowClassA(hwnd
, class_name
, sizeof(class_name
));
829 ok(!strncmp(class_name
, "ATL:", 4), "class_name = %s %d\n", class_name
, i
);
831 res
= GetWindowInfo(hwnd
, &wi
);
832 ok(res
, "GetWindowInfo failed: %u\n", GetLastError());
834 test_rect_size(&wi
.rcWindow
, 400, 410);
835 test_rect_size(&wi
.rcClient
, 400, 410);
837 ok(wi
.dwStyle
== (WS_CLIPCHILDREN
|WS_CLIPSIBLINGS
|WS_VISIBLE
|WS_CHILD
), "dwStyle = %x\n", wi
.dwStyle
);
838 ok(!(wi
.dwExStyle
& ~0x800 /* undocumented, set by some versions */), "dwExStyle = %x\n", wi
.dwExStyle
);
840 ok(IsWindowVisible(hwnd
), "Window is not visible\n");
843 static void test_QI(IUnknown
*unk
)
848 hres
= IUnknown_QueryInterface(unk
, &IID_IQuickActivate
, (void**)&tmp
);
849 ok(hres
== E_NOINTERFACE
, "Got IQuickActivate iface when no expected\n");
851 hres
= IUnknown_QueryInterface(unk
, &IID_IOleInPlaceObjectWindowless
, (void**)&tmp
);
852 ok(hres
== S_OK
, "Could not get IOleInPlaceObjectWindowless iface: %08x\n", hres
);
853 IUnknown_Release(tmp
);
855 hres
= IUnknown_QueryInterface(unk
, &IID_IConnectionPointContainer
, (void**)&tmp
);
856 ok(hres
== S_OK
, "Could not get IConnectionPointContainer iface: %08x\n", hres
);
857 IUnknown_Release(tmp
);
860 static void test_wmp(void)
862 IProvideClassInfo2
*class_info
;
863 IOleClientSite
*client_site
;
864 IOleInPlaceObject
*ipobj
;
865 IPersistStreamInit
*psi
;
869 RECT pos
= {0,0,100,100};
876 hres
= CoCreateInstance(&CLSID_WindowsMediaPlayer
, NULL
, CLSCTX_INPROC_SERVER
, &IID_IOleObject
, (void**)&oleobj
);
877 if(hres
== REGDB_E_CLASSNOTREG
) {
878 win_skip("CLSID_WindowsMediaPlayer not registered\n");
881 ok(hres
== S_OK
, "Could not create CLSID_WindowsMediaPlayer instance: %08x\n", hres
);
883 hres
= IOleObject_QueryInterface(oleobj
, &IID_IWMPCore
, (void**)&wmpcore
);
884 ok(hres
== S_OK
, "got 0x%08x\n", hres
);
886 hres
= IWMPCore_get_versionInfo(wmpcore
, NULL
);
887 ok(hres
== E_POINTER
, "got 0x%08x\n", hres
);
889 hres
= IWMPCore_get_versionInfo(wmpcore
, &str
);
890 ok(hres
== S_OK
, "got 0x%08x\n", hres
);
893 IWMPCore_Release(wmpcore
);
895 hres
= IOleObject_QueryInterface(oleobj
, &IID_IProvideClassInfo2
, (void**)&class_info
);
896 ok(hres
== S_OK
, "Could not get IProvideClassInfo2 iface: %08x\n", hres
);
898 hres
= IProvideClassInfo2_GetGUID(class_info
, GUIDKIND_DEFAULT_SOURCE_DISP_IID
, &guid
);
899 ok(hres
== S_OK
, "GetGUID failed: %08x\n", hres
);
900 ok(IsEqualGUID(&guid
, &IID__WMPOCXEvents
), "guid = %s\n", wine_dbgstr_guid(&guid
));
902 IProvideClassInfo2_Release(class_info
);
904 test_QI((IUnknown
*)oleobj
);
906 hres
= IOleObject_GetMiscStatus(oleobj
, DVASPECT_CONTENT
, &misc_status
);
907 ok(hres
== S_OK
, "GetMiscStatus failed: %08x\n", hres
);
908 ok(misc_status
== (OLEMISC_SETCLIENTSITEFIRST
|OLEMISC_ACTIVATEWHENVISIBLE
|OLEMISC_INSIDEOUT
909 |OLEMISC_CANTLINKINSIDE
|OLEMISC_RECOMPOSEONRESIZE
), "misc_status = %x\n", misc_status
);
911 hres
= IOleObject_QueryInterface(oleobj
, &IID_IPersistStreamInit
, (void**)&psi
);
912 ok(hres
== S_OK
, "Could not get IPersistStreamInit iface: %08x\n", hres
);
914 hres
= IOleObject_QueryInterface(oleobj
, &IID_IOleInPlaceObject
, (void**)&ipobj
);
915 ok(hres
== S_OK
, "Could not get IOleInPlaceObject iface: %08x\n", hres
);
917 hres
= IPersistStreamInit_InitNew(psi
);
918 ok(hres
== E_FAIL
|| broken(hres
== S_OK
/* Old WMP */), "InitNew failed: %08x\n", hres
);
920 SET_EXPECT(GetContainer
);
921 SET_EXPECT(GetExtendedControl
);
922 SET_EXPECT(GetWindow
);
923 SET_EXPECT(Invoke_USERMODE
);
924 hres
= IOleObject_SetClientSite(oleobj
, &ClientSite
);
925 ok(hres
== S_OK
, "SetClientSite failed: %08x\n", hres
);
926 todo_wine
CHECK_CALLED(GetContainer
);
927 CHECK_CALLED(GetExtendedControl
);
928 todo_wine
CHECK_CALLED(GetWindow
);
929 todo_wine
CHECK_CALLED(Invoke_USERMODE
);
932 hres
= IOleObject_GetClientSite(oleobj
, &client_site
);
933 ok(hres
== S_OK
, "GetClientSite failed: %08x\n", hres
);
934 ok(client_site
== &ClientSite
, "client_site != ClientSite\n");
936 SET_EXPECT(GetWindow
);
937 hres
= IPersistStreamInit_InitNew(psi
);
938 ok(hres
== S_OK
, "InitNew failed: %08x\n", hres
);
939 CHECK_CALLED(GetWindow
);
941 hwnd
= (HWND
)0xdeadbeef;
942 hres
= IOleInPlaceObject_GetWindow(ipobj
, &hwnd
);
943 ok(hres
== E_UNEXPECTED
, "GetWindow failed: %08x\n", hres
);
944 ok(!hwnd
, "hwnd = %p\n", hwnd
);
946 SET_EXPECT(GetWindow
);
947 SET_EXPECT(CanWindowlessActivate
);
948 SET_EXPECT(OnInPlaceActivateEx
);
949 SET_EXPECT(GetWindowContext
);
950 SET_EXPECT(ShowObject
);
951 hres
= IOleObject_DoVerb(oleobj
, OLEIVERB_INPLACEACTIVATE
, NULL
, &ClientSite
, 0, container_hwnd
, &pos
);
952 ok(hres
== S_OK
, "DoVerb failed: %08x\n", hres
);
953 CHECK_CALLED(GetWindow
);
954 CHECK_CALLED(CanWindowlessActivate
);
955 CHECK_CALLED(OnInPlaceActivateEx
);
956 CHECK_CALLED(GetWindowContext
);
957 CHECK_CALLED(ShowObject
);
960 hres
= IOleInPlaceObject_GetWindow(ipobj
, &hwnd
);
961 ok(hres
== S_OK
, "GetWindow failed: %08x\n", hres
);
962 ok(hwnd
!= NULL
, "hwnd = NULL\n");
970 hres
= IOleInPlaceObject_SetObjectRects(ipobj
, &pos
, &pos
);
971 ok(hres
== S_OK
, "SetObjectRects failed: %08x\n", hres
);
972 GetClientRect(hwnd
, &pos
);
973 test_rect_size(&pos
, 300, 310);
975 test_wmp_ifaces(oleobj
);
977 hres
= IOleObject_DoVerb(oleobj
, OLEIVERB_HIDE
, NULL
, &ClientSite
, 0, container_hwnd
, &pos
);
978 ok(hres
== S_OK
, "DoVerb failed: %08x\n", hres
);
979 ok(!IsWindowVisible(hwnd
), "Window is visible\n");
981 SET_EXPECT(OnShowWindow_FALSE
);
982 SET_EXPECT(OnInPlaceDeactivate
);
983 hres
= IOleObject_Close(oleobj
, 0);
984 ok(hres
== S_OK
, "Close failed: %08x\n", hres
);
985 todo_wine
CHECK_CALLED(OnShowWindow_FALSE
);
986 CHECK_CALLED(OnInPlaceDeactivate
);
988 hwnd
= (HWND
)0xdeadbeef;
989 hres
= IOleInPlaceObject_GetWindow(ipobj
, &hwnd
);
990 ok(hres
== E_UNEXPECTED
, "GetWindow failed: %08x\n", hres
);
991 ok(!hwnd
, "hwnd = %p\n", hwnd
);
993 hres
= IOleObject_Close(oleobj
, 0);
994 ok(hres
== S_OK
, "Close failed: %08x\n", hres
);
996 hres
= IOleObject_SetClientSite(oleobj
, NULL
);
997 ok(hres
== S_OK
, "SetClientSite failed: %08x\n", hres
);
999 client_site
= (void*)0xdeadbeef;
1000 hres
= IOleObject_GetClientSite(oleobj
, &client_site
);
1001 ok(hres
== E_FAIL
|| broken(hres
== S_OK
), "GetClientSite failed: %08x\n", hres
);
1002 ok(!client_site
, "client_site = %p\n", client_site
);
1004 IPersistStreamInit_Release(psi
);
1005 IOleInPlaceObject_Release(ipobj
);
1007 ref
= IOleObject_Release(oleobj
);
1008 ok(!ref
, "ref = %d\n", ref
);
1011 static LRESULT WINAPI
wnd_proc(HWND hwnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
)
1013 return DefWindowProcW(hwnd
, msg
, wParam
, lParam
);
1016 static void create_container_window(void)
1018 static const WCHAR wmp_testW
[] =
1019 {'W','M','P','T','e','s','t',0};
1020 static WNDCLASSEXW wndclass
= {
1021 sizeof(WNDCLASSEXW
),
1024 0, 0, NULL
, NULL
, NULL
, NULL
, NULL
,
1029 RegisterClassExW(&wndclass
);
1030 container_hwnd
= CreateWindowW(wmp_testW
, wmp_testW
,
1031 WS_OVERLAPPEDWINDOW
, CW_USEDEFAULT
, CW_USEDEFAULT
,
1032 515, 530, NULL
, NULL
, NULL
, NULL
);
1033 ShowWindow(container_hwnd
, SW_SHOW
);
1038 create_container_window();
1044 DestroyWindow(container_hwnd
);