include: Make sure interlocked_cmpxchg128 is defined on ARM64.
[wine] / include / oleidl.idl
1 /*
2  * Copyright (C) 1999 Paul Quinn
3  * Copyright (C) 1999 Francis Beaudet
4  * Copyright (C) 2003 Alexandre Julliard
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 DO_NO_IMPORTS
22 import "objidl.idl";
23 #endif
24
25 interface IOleInPlaceActiveObject;
26
27 cpp_quote("#include <winuser.h>")
28
29 /*****************************************************************************
30  * IOleTypes interface
31  */
32 [
33     uuid(b0916c84-7416-101a-bcea-08002b2b79ef)
34 ]
35 interface IOLETypes
36 {
37     typedef enum tagOLERENDER
38     {
39         OLERENDER_NONE = 0,
40         OLERENDER_DRAW = 1,
41         OLERENDER_FORMAT = 2,
42         OLERENDER_ASIS = 3
43     } OLERENDER, *LPOLERENDER;
44
45     typedef struct tagOBJECTDESCRIPTOR
46     {
47         ULONG cbSize;
48         CLSID clsid;
49         DWORD dwDrawAspect;
50         SIZEL sizel;
51         POINTL pointl;
52         DWORD dwStatus;
53         DWORD dwFullUserTypeName;
54         DWORD dwSrcOfCopy;
55     } OBJECTDESCRIPTOR,  *POBJECTDESCRIPTOR,   *LPOBJECTDESCRIPTOR,
56       LINKSRCDESCRIPTOR, *PLINKSRCDESCRIPTOR,  *LPLINKSRCDESCRIPTOR;
57 }
58
59
60 /*****************************************************************************
61  * IOleWindow interface
62  */
63 [
64     object,
65     uuid(00000114-0000-0000-c000-000000000046),
66     pointer_default(unique)
67 ]
68 interface IOleWindow : IUnknown
69 {
70     typedef [unique] IOleWindow *LPOLEWINDOW;
71
72     HRESULT GetWindow(
73         [out] HWND *phwnd);
74
75     HRESULT ContextSensitiveHelp(
76         [in] BOOL fEnterMode);
77 }
78
79
80 /*****************************************************************************
81  * IOleInPlaceObject interface
82  */
83 [
84     object,
85     uuid(00000113-0000-0000-c000-000000000046),
86     pointer_default(unique)
87 ]
88 interface IOleInPlaceObject : IOleWindow
89 {
90     typedef [unique] IOleInPlaceObject *LPOLEINPLACEOBJECT;
91
92     HRESULT InPlaceDeactivate();
93
94     HRESULT UIDeactivate();
95
96     HRESULT SetObjectRects(
97         [in] LPCRECT lprcPosRect,
98         [in] LPCRECT lprcClipRect);
99
100     HRESULT ReactivateAndUndo();
101 }
102
103
104 /*****************************************************************************
105  * IOleInPlaceUIWindow interface
106  */
107 [
108     object,
109     uuid(00000115-0000-0000-c000-000000000046),
110     pointer_default(unique)
111 ]
112
113 interface IOleInPlaceUIWindow : IOleWindow
114 {
115     typedef [unique] IOleInPlaceUIWindow *LPOLEINPLACEUIWINDOW;
116
117     typedef RECT BORDERWIDTHS;
118     typedef LPRECT LPBORDERWIDTHS;
119     typedef LPCRECT LPCBORDERWIDTHS;
120
121     HRESULT GetBorder(
122         [out] LPRECT lprectBorder);
123
124     HRESULT RequestBorderSpace(
125         [in, unique] LPCBORDERWIDTHS pborderwidths);
126
127     HRESULT SetBorderSpace(
128         [in, unique] LPCBORDERWIDTHS pborderwidths);
129
130     HRESULT SetActiveObject(
131         [in, unique] IOleInPlaceActiveObject *pActiveObject,
132         [in, string, unique] LPCOLESTR pszObjName);
133 }
134
135
136 /* avoid conflict with Wine Unicode macros */
137 cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
138 cpp_quote("#undef TranslateAccelerator")
139 cpp_quote("#endif")
140
141 /*****************************************************************************
142  * IOleInPlaceFrame interface
143  */
144 [
145     object,
146     uuid(00000116-0000-0000-c000-000000000046),
147     pointer_default(unique)
148 ]
149 interface IOleInPlaceFrame : IOleInPlaceUIWindow
150 {
151     typedef [unique] IOleInPlaceFrame *LPOLEINPLACEFRAME;
152
153     typedef struct tagOleInPlaceFrameInfo
154     {
155         UINT cb;
156         BOOL fMDIApp;
157         HWND hwndFrame;
158         HACCEL haccel;
159         UINT cAccelEntries;
160     } OLEINPLACEFRAMEINFO, *LPOLEINPLACEFRAMEINFO;
161
162     typedef struct  tagOleMenuGroupWidths
163     {
164         LONG width[ 6 ];
165     } OLEMENUGROUPWIDTHS, *LPOLEMENUGROUPWIDTHS;
166
167     typedef HGLOBAL HOLEMENU;
168
169     HRESULT InsertMenus(
170         [in] HMENU hmenuShared,
171         [in,out] LPOLEMENUGROUPWIDTHS lpMenuWidths);
172
173     HRESULT SetMenu(
174         [in] HMENU hmenuShared,
175         [in] HOLEMENU holemenu,
176         [in] HWND hwndActiveObject);
177
178     HRESULT RemoveMenus(
179         [in] HMENU hmenuShared);
180
181     HRESULT SetStatusText(
182         [in, unique] LPCOLESTR pszStatusText);
183
184     HRESULT EnableModeless(
185         [in] BOOL fEnable);
186
187     HRESULT TranslateAccelerator(
188         [in] LPMSG lpmsg,
189         [in] WORD wID);
190 }
191
192
193 /*****************************************************************************
194  * IOleInPlaceActiveObject interface
195  */
196 [
197     object,
198     uuid(00000117-0000-0000-c000-000000000046)
199 ]
200 interface IOleInPlaceActiveObject : IOleWindow
201 {
202     typedef [unique] IOleInPlaceActiveObject *LPOLEINPLACEACTIVEOBJECT;
203
204     [local]
205     HRESULT TranslateAccelerator(
206         [in] LPMSG lpmsg);
207
208     [call_as(TranslateAccelerator)]
209     HRESULT RemoteTranslateAccelerator();
210
211     HRESULT OnFrameWindowActivate(
212         [in] BOOL fActivate);
213
214     HRESULT OnDocWindowActivate(
215         [in] BOOL fActivate);
216
217     [local]
218     HRESULT ResizeBorder(
219         [in] LPCRECT prcBorder,
220         [in, unique] IOleInPlaceUIWindow *pUIWindow,
221         [in] BOOL fFrameWindow);
222
223     [call_as(ResizeBorder)]
224     HRESULT RemoteResizeBorder(
225         [in] LPCRECT prcBorder,
226         [in] REFIID riid,
227         [in, unique, iid_is(riid)] IOleInPlaceUIWindow *pUIWindow,
228         [in] BOOL fFrameWindow);
229
230     HRESULT EnableModeless(
231         [in] BOOL fEnable);
232 }
233
234
235 /*****************************************************************************
236  * IOleInPlaceSite interface
237  */
238 [
239     object,
240     uuid(00000119-0000-0000-c000-000000000046),
241     pointer_default(unique)
242 ]
243 interface IOleInPlaceSite : IOleWindow
244 {
245     typedef [unique] IOleInPlaceSite *LPOLEINPLACESITE;
246
247     HRESULT CanInPlaceActivate();
248     HRESULT OnInPlaceActivate();
249     HRESULT OnUIActivate();
250
251     HRESULT GetWindowContext(
252         [out] IOleInPlaceFrame **ppFrame,
253         [out] IOleInPlaceUIWindow **ppDoc,
254         [out] LPRECT lprcPosRect,
255         [out] LPRECT lprcClipRect,
256         [in, out] LPOLEINPLACEFRAMEINFO lpFrameInfo);
257
258     HRESULT Scroll(
259         [in] SIZE scrollExtent);
260
261     HRESULT OnUIDeactivate(
262         [in] BOOL fUndoable);
263
264     HRESULT OnInPlaceDeactivate();
265     HRESULT DiscardUndoState();
266     HRESULT DeactivateAndUndo();
267
268     HRESULT OnPosRectChange(
269         [in] LPCRECT lprcPosRect);
270 }
271
272
273 /*****************************************************************************
274  * IParseDisplayName interface
275  */
276 [
277     object,
278     uuid(0000011a-0000-0000-c000-000000000046),
279     pointer_default(unique)
280 ]
281 interface IParseDisplayName : IUnknown
282 {
283     typedef [unique] IParseDisplayName *LPPARSEDISPLAYNAME;
284
285     HRESULT ParseDisplayName(
286         [in, unique] IBindCtx *pbc,
287         [in] LPOLESTR pszDisplayName,
288         [out] ULONG *pchEaten,
289         [out] IMoniker **ppmkOut);
290 }
291
292
293 /*****************************************************************************
294  * IOleContainer interface
295  */
296 [
297     object,
298     uuid(0000011b-0000-0000-c000-000000000046),
299     pointer_default(unique)
300 ]
301 interface IOleContainer : IParseDisplayName
302 {
303     typedef [unique] IOleContainer *LPOLECONTAINER;
304
305     HRESULT EnumObjects(
306         [in] DWORD grfFlags,
307         [out] IEnumUnknown **ppenum);
308
309     HRESULT LockContainer(
310         [in] BOOL fLock);
311 }
312
313
314 /*****************************************************************************
315  * IOleItemContainer interface
316  */
317 [
318     object,
319     uuid(0000011c-0000-0000-c000-000000000046),
320     pointer_default(unique)
321 ]
322 interface IOleItemContainer : IOleContainer
323 {
324     typedef [unique] IOleItemContainer *LPOLEITEMCONTAINER;
325
326     typedef enum tagBINDSPEED
327     {
328         BINDSPEED_INDEFINITE = 1,
329         BINDSPEED_MODERATE = 2,
330         BINDSPEED_IMMEDIATE = 3
331     } BINDSPEED;
332
333     typedef enum tagOLECONTF
334     {
335         OLECONTF_EMBEDDINGS = 1,
336         OLECONTF_LINKS = 2,
337         OLECONTF_OTHERS = 4,
338         OLECONTF_ONLYUSER = 8,
339         OLECONTF_ONLYIFRUNNING = 16
340     } OLECONTF;
341
342 cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
343 cpp_quote("#undef GetObject")
344 cpp_quote("#endif")
345     HRESULT GetObject(
346         [in] LPOLESTR pszItem,
347         [in] DWORD dwSpeedNeeded,
348         [in, unique] IBindCtx *pbc,
349         [in] REFIID riid,
350         [out, iid_is(riid)] void **ppvObject);
351
352     HRESULT GetObjectStorage(
353         [in] LPOLESTR pszItem,
354         [in, unique] IBindCtx *pbc,
355         [in] REFIID riid,
356         [out, iid_is(riid)] void **ppvStorage);
357
358     HRESULT IsRunning(
359         [in] LPOLESTR pszItem);
360 }
361
362
363 /*****************************************************************************
364  * IOleLink interface
365  */
366 [
367     object,
368     uuid(0000011d-0000-0000-c000-000000000046)
369 ]
370 interface IOleLink : IUnknown
371 {
372     typedef [unique] IOleLink *LPOLELINK;
373
374     typedef enum tagOLEUPDATE
375     {
376         OLEUPDATE_ALWAYS = 1,
377         OLEUPDATE_ONCALL = 3
378     } OLEUPDATE, *POLEUPDATE, *LPOLEUPDATE;
379
380     typedef enum tagOLELINKBIND
381     {
382         OLELINKBIND_EVENIFCLASSDIFF = 1
383     } OLELINKBIND;
384
385     HRESULT SetUpdateOptions(
386         [in] DWORD dwUpdateOpt);
387
388     HRESULT GetUpdateOptions(
389         [out] DWORD *pdwUpdateOpt);
390
391     HRESULT SetSourceMoniker(
392         [in, unique] IMoniker *pmk,
393         [in] REFCLSID rclsid);
394
395     HRESULT GetSourceMoniker(
396         [out] IMoniker **ppmk);
397
398     HRESULT SetSourceDisplayName(
399         [in]LPCOLESTR pszStatusText);
400
401     HRESULT GetSourceDisplayName(
402         [out] LPOLESTR *ppszDisplayName);
403
404     HRESULT BindToSource(
405         [in] DWORD bindflags,
406         [in, unique] IBindCtx *pbc);
407
408     HRESULT BindIfRunning();
409
410     HRESULT GetBoundSource(
411         [out] IUnknown **ppunk);
412
413     HRESULT UnbindSource();
414
415     HRESULT Update(
416         [in, unique] IBindCtx *pbc);
417 }
418
419
420 /*****************************************************************************
421  * IOleClientSite interface
422  */
423 [
424     object,
425     uuid(00000118-0000-0000-c000-000000000046),
426     pointer_default(unique)
427 ]
428 interface IOleClientSite : IUnknown
429 {
430     typedef [unique] IOleClientSite * LPOLECLIENTSITE;
431
432     HRESULT SaveObject();
433
434     HRESULT GetMoniker(
435         [in] DWORD dwAssign,
436         [in] DWORD dwWhichMoniker,
437         [out] IMoniker **ppmk);
438
439     HRESULT GetContainer(
440         [out] IOleContainer **ppContainer);
441
442     HRESULT ShowObject();
443
444     HRESULT OnShowWindow(
445         [in] BOOL fShow);
446
447     HRESULT RequestNewObjectLayout();
448 }
449
450
451 /*****************************************************************************
452  * IOleCache interface
453  */
454 [
455     object,
456     uuid(0000011e-0000-0000-c000-000000000046),
457     pointer_default(unique)
458 ]
459 interface IOleCache : IUnknown
460 {
461     typedef [unique] IOleCache *LPOLECACHE;
462
463     HRESULT Cache(
464         [in, unique] FORMATETC *pformatetc,
465         [in] DWORD advf,
466         [out] DWORD *pdwConnection);
467
468     HRESULT Uncache(
469         [in] DWORD dwConnection);
470
471     HRESULT EnumCache(
472         [out] IEnumSTATDATA **ppenumSTATDATA);
473
474     HRESULT InitCache(
475         [in, unique] IDataObject *pDataObject);
476
477     HRESULT SetData(
478         [in, unique] FORMATETC *pformatetc,
479         [in, unique] STGMEDIUM *pmedium,
480         [in] BOOL fRelease);
481 }
482
483
484 /*****************************************************************************
485  * IOleCache2 interface
486  */
487 [
488     object,
489     uuid(00000128-0000-0000-c000-000000000046),
490     pointer_default(unique)
491 ]
492 interface IOleCache2 : IOleCache
493 {
494     typedef [unique] IOleCache2 *LPOLECACHE2;
495
496     const DWORD UPDFCACHE_NODATACACHE = 0x00000001;
497     const DWORD UPDFCACHE_ONSAVECACHE = 0x00000002;
498     const DWORD UPDFCACHE_ONSTOPCACHE = 0x00000004;
499     const DWORD UPDFCACHE_NORMALCACHE = 0x00000008;
500     const DWORD UPDFCACHE_IFBLANK     = 0x00000010;
501     const DWORD UPDFCACHE_ONLYIFBLANK = 0x80000000;
502
503     const DWORD UPDFCACHE_IFBLANKORONSAVECACHE = (UPDFCACHE_IFBLANK | UPDFCACHE_ONSAVECACHE);
504     const DWORD UPDFCACHE_ALL = ((DWORD)(~(UPDFCACHE_ONLYIFBLANK)));
505     const DWORD UPDFCACHE_ALLBUTNODATACACHE = (UPDFCACHE_ALL & ((DWORD)(~UPDFCACHE_NODATACACHE)));
506
507     typedef enum tagDISCARDCACHE
508     {
509         DISCARDCACHE_SAVEIFDIRTY = 0,
510         DISCARDCACHE_NOSAVE =  1
511     } DISCARDCACHE;
512
513     [local]
514     HRESULT UpdateCache(
515         [in] LPDATAOBJECT pDataObject,
516         [in] DWORD grfUpdf,
517         [in] LPVOID pReserved);
518
519     [call_as(UpdateCache)]
520     HRESULT RemoteUpdateCache(
521         [in] LPDATAOBJECT pDataObject,
522         [in] DWORD grfUpdf,
523         [in] LONG_PTR pReserved);
524
525     HRESULT DiscardCache(
526         [in] DWORD dwDiscardOptions);
527 }
528
529
530 /*****************************************************************************
531  * IOleCacheControl interface
532  */
533 [
534     object,
535     uuid(00000129-0000-0000-c000-000000000046)
536 ]
537 interface IOleCacheControl : IUnknown
538 {
539     typedef [unique] IOleCacheControl *LPOLECACHECONTROL;
540
541     HRESULT OnRun(
542         LPDATAOBJECT pDataObject);
543
544     HRESULT OnStop();
545 }
546
547
548 /*****************************************************************************
549  *  IEnumOLEVERB interface
550  */
551 [
552     object,
553     uuid(00000104-0000-0000-c000-000000000046),
554     pointer_default(unique)
555 ]
556 interface IEnumOLEVERB : IUnknown
557 {
558     typedef [unique] IEnumOLEVERB *LPENUMOLEVERB;
559
560     typedef struct tagOLEVERB
561     {
562         LONG lVerb;
563         LPOLESTR lpszVerbName;
564         DWORD fuFlags;
565         DWORD grfAttribs;
566     } OLEVERB, *LPOLEVERB;
567
568     typedef enum tagOLEVERBATTRIB
569     {
570         OLEVERBATTRIB_NEVERDIRTIES = 1,
571         OLEVERBATTRIB_ONCONTAINERMENU = 2
572     } OLEVERBATTRIB;
573
574     [local]
575     HRESULT Next(
576         [in] ULONG celt,
577         [out, size_is(celt), length_is(*pceltFetched)] LPOLEVERB rgelt,
578         [out] ULONG *pceltFetched);
579
580     [call_as(Next)]
581     HRESULT RemoteNext(
582         [in] ULONG celt,
583         [out, size_is(celt), length_is(*pceltFetched)] LPOLEVERB rgelt,
584         [out] ULONG *pceltFetched);
585
586     HRESULT Skip(
587         [in] ULONG celt);
588
589     HRESULT Reset();
590
591     HRESULT Clone(
592         [out] IEnumOLEVERB **ppenum);
593 }
594
595
596 /*****************************************************************************
597  * IOleObject interface
598  */
599 [
600     object,
601     uuid(00000112-0000-0000-c000-000000000046),
602     pointer_default(unique)
603 ]
604 interface IOleObject : IUnknown
605 {
606     typedef [unique] IOleObject *LPOLEOBJECT;
607
608     typedef enum tagOLEGETMONIKER
609     {
610         OLEGETMONIKER_ONLYIFTHERE = 1,
611         OLEGETMONIKER_FORCEASSIGN = 2,
612         OLEGETMONIKER_UNASSIGN = 3,
613         OLEGETMONIKER_TEMPFORUSER = 4
614     } OLEGETMONIKER;
615
616     typedef enum tagOLEWHICHMK
617     {
618         OLEWHICHMK_CONTAINER = 1,
619         OLEWHICHMK_OBJREL = 2,
620         OLEWHICHMK_OBJFULL = 3
621     } OLEWHICHMK;
622
623     typedef enum tagUSERCLASSTYPE
624     {
625         USERCLASSTYPE_FULL = 1,
626         USERCLASSTYPE_SHORT = 2,
627         USERCLASSTYPE_APPNAME = 3
628     } USERCLASSTYPE;
629
630     typedef enum tagOLEMISC
631     {
632         OLEMISC_RECOMPOSEONRESIZE = 0x1,
633         OLEMISC_ONLYICONIC = 0x2,
634         OLEMISC_INSERTNOTREPLACE = 0x4,
635         OLEMISC_STATIC = 0x8,
636         OLEMISC_CANTLINKINSIDE = 0x10,
637         OLEMISC_CANLINKBYOLE1 = 0x20,
638         OLEMISC_ISLINKOBJECT = 0x40,
639         OLEMISC_INSIDEOUT = 0x80,
640         OLEMISC_ACTIVATEWHENVISIBLE = 0x100,
641         OLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x200,
642         OLEMISC_INVISIBLEATRUNTIME = 0x400,
643         OLEMISC_ALWAYSRUN = 0x800,
644         OLEMISC_ACTSLIKEBUTTON = 0x1000,
645         OLEMISC_ACTSLIKELABEL = 0x2000,
646         OLEMISC_NOUIACTIVATE = 0x4000,
647         OLEMISC_ALIGNABLE = 0x8000,
648         OLEMISC_SIMPLEFRAME = 0x10000,
649         OLEMISC_SETCLIENTSITEFIRST = 0x20000,
650         OLEMISC_IMEMODE = 0x40000,
651         OLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x80000,
652         OLEMISC_WANTSTOMENUMERGE = 0x100000,
653         OLEMISC_SUPPORTSMULTILEVELUNDO = 0x200000
654     } OLEMISC;
655
656     typedef enum tagOLECLOSE
657     {
658         OLECLOSE_SAVEIFDIRTY = 0,
659         OLECLOSE_NOSAVE = 1,
660         OLECLOSE_PROMPTSAVE = 2
661     } OLECLOSE;
662
663     HRESULT SetClientSite(
664         [in, unique] IOleClientSite *pClientSite);
665
666     HRESULT GetClientSite(
667         [out] IOleClientSite **ppClientSite);
668
669     HRESULT SetHostNames(
670         [in] LPCOLESTR szContainerApp,
671         [in, unique] LPCOLESTR szContainerObj);
672
673     HRESULT Close(
674         [in] DWORD dwSaveOption);
675
676     HRESULT SetMoniker(
677         [in] DWORD dwWhichMoniker,
678         [in, unique] IMoniker *pmk);
679
680     HRESULT GetMoniker(
681         [in] DWORD dwAssign,
682         [in] DWORD dwWhichMoniker,
683         [out] IMoniker **ppmk);
684
685     HRESULT InitFromData(
686         [in, unique] IDataObject *pDataObject,
687         [in] BOOL fCreation,
688         [in] DWORD dwReserved);
689
690     HRESULT GetClipboardData(
691         [in] DWORD dwReserved,
692         [out] IDataObject **ppDataObject);
693
694     HRESULT DoVerb(
695         [in] LONG iVerb,
696         [in, unique] LPMSG lpmsg,
697         [in, unique] IOleClientSite *pActiveSite,
698         [in] LONG lindex,
699         [in] HWND hwndParent,
700         [in, unique] LPCRECT lprcPosRect);
701
702     HRESULT EnumVerbs(
703         [out] IEnumOLEVERB **ppEnumOleVerb);
704
705     HRESULT Update();
706
707     HRESULT IsUpToDate();
708
709     HRESULT GetUserClassID(
710         [out] CLSID *pClsid);
711
712     HRESULT GetUserType(
713         [in] DWORD dwFormOfType,
714         [out] LPOLESTR *pszUserType);
715
716     HRESULT SetExtent(
717         [in] DWORD dwDrawAspect,
718         [in] SIZEL *psizel);
719
720     HRESULT GetExtent(
721         [in] DWORD dwDrawAspect,
722         [out] SIZEL *psizel);
723
724     HRESULT Advise(
725         [in, unique] IAdviseSink *pAdvSink,
726         [out] DWORD *pdwConnection);
727
728     HRESULT Unadvise(
729         [in] DWORD dwConnection);
730
731     HRESULT EnumAdvise(
732         [out] IEnumSTATDATA **ppenumAdvise);
733
734     HRESULT GetMiscStatus(
735         [in] DWORD dwAspect,
736         [out] DWORD *pdwStatus);
737
738     HRESULT SetColorScheme(
739         [in] LOGPALETTE *pLogpal);
740 }
741
742
743 /*****************************************************************************
744  * IOleAdviseHolder interface
745  */
746 [
747     local,
748     object,
749     uuid(00000111-0000-0000-c000-000000000046)
750 ]
751 interface IOleAdviseHolder : IUnknown
752 {
753     typedef [unique] IOleAdviseHolder * LPOLEADVISEHOLDER;
754
755     HRESULT Advise(
756         [in, unique] IAdviseSink *pAdvise,
757         [out] DWORD *pdwConnection);
758
759     HRESULT Unadvise(
760         [in] DWORD dwConnection);
761
762     HRESULT EnumAdvise(
763         [out] IEnumSTATDATA **ppenumAdvise);
764
765     HRESULT SendOnRename(
766         [in, unique] IMoniker *pmk);
767
768     HRESULT SendOnSave();
769     HRESULT SendOnClose();
770 }
771
772
773 /*****************************************************************************
774  * IContinue interface
775  */
776 [
777     object,
778     uuid(0000012a-0000-0000-c000-000000000046)
779 ]
780 interface IContinue : IUnknown
781 {
782     HRESULT FContinue();
783 }
784
785
786 /*****************************************************************************
787  * IViewObject interface
788  */
789 [
790     object,
791     uuid(0000010d-0000-0000-c000-000000000046)
792 ]
793 interface IViewObject : IUnknown
794 {
795     typedef [unique] IViewObject *LPVIEWOBJECT;
796
797     [local]
798     HRESULT Draw(
799         [in] DWORD dwDrawAspect,
800         [in] LONG lindex,
801         [in, unique] void * pvAspect,
802         [in, unique] DVTARGETDEVICE *ptd,
803         [in] HDC hdcTargetDev,
804         [in] HDC hdcDraw,
805         [in] LPCRECTL lprcBounds,
806         [in, unique] LPCRECTL lprcWBounds,
807         [in] BOOL (*pfnContinue)(ULONG_PTR dwContinue),
808         [in] ULONG_PTR dwContinue);
809
810     [call_as(Draw)]
811     HRESULT RemoteDraw(
812         [in] DWORD dwDrawAspect,
813         [in] LONG lindex,
814         [in] ULONG_PTR pvAspect,
815         [in, unique] DVTARGETDEVICE *ptd,
816         [in] ULONG_PTR hdcTargetDev,
817         [in] ULONG_PTR hdcDraw,
818         [in] LPCRECTL lprcBounds,
819         [in, unique] LPCRECTL lprcWBounds,
820         [in] IContinue *pContinue);
821
822     [local]
823     HRESULT GetColorSet(
824         [in] DWORD dwDrawAspect,
825         [in] LONG lindex,
826         [in, unique] void *pvAspect,
827         [in, unique] DVTARGETDEVICE *ptd,
828         [in] HDC hicTargetDev,
829         [out] LOGPALETTE **ppColorSet);
830
831     [call_as(GetColorSet)]
832     HRESULT RemoteGetColorSet(
833         [in] DWORD dwDrawAspect,
834         [in] LONG lindex,
835         [in] ULONG_PTR pvAspect,
836         [in, unique] DVTARGETDEVICE *ptd,
837         [in] ULONG_PTR hicTargetDev,
838         [out] LOGPALETTE **ppColorSet);
839
840     [local]
841     HRESULT Freeze(
842         [in] DWORD dwDrawAspect,
843         [in] LONG lindex,
844         [in, unique] void *pvAspect,
845         [out] DWORD *pdwFreeze);
846
847     [call_as(Freeze)]
848     HRESULT RemoteFreeze(
849         [in] DWORD dwDrawAspect,
850         [in] LONG lindex,
851         [in] ULONG_PTR pvAspect,
852         [out] DWORD *pdwFreeze);
853
854     HRESULT Unfreeze(
855         [in] DWORD dwFreeze);
856
857     HRESULT SetAdvise(
858         [in] DWORD aspects,
859         [in] DWORD advf,
860         [in, unique] IAdviseSink *pAdvSink);
861
862     [local]
863     HRESULT GetAdvise(
864         [out, unique] DWORD *pAspects,
865         [out, unique] DWORD *pAdvf,
866         [out] IAdviseSink **ppAdvSink);
867
868     [call_as(GetAdvise)]
869     HRESULT RemoteGetAdvise(
870         [out] DWORD *pAspects,
871         [out] DWORD *pAdvf,
872         [out] IAdviseSink **ppAdvSink);
873 }
874
875
876 /*****************************************************************************
877  * IViewObject2 interface
878  */
879 [
880     object,
881     uuid(00000127-0000-0000-c000-000000000046)
882 ]
883 interface IViewObject2 : IViewObject
884 {
885     typedef [unique] IViewObject2 *LPVIEWOBJECT2;
886
887     HRESULT GetExtent(
888         [in]  DWORD dwDrawAspect,
889         [in]  LONG lindex,
890         [in, unique]  DVTARGETDEVICE* ptd,
891         [out] LPSIZEL lpsizel);
892 }
893
894
895 /*****************************************************************************
896  * IDropSource interface
897  */
898 [
899     local,
900     object,
901     uuid(00000121-0000-0000-c000-000000000046)
902 ]
903 interface IDropSource : IUnknown
904 {
905     typedef [unique] IDropSource *LPDROPSOURCE;
906
907     HRESULT QueryContinueDrag(
908         [in] BOOL fEscapePressed,
909         [in] DWORD grfKeyState);
910
911     HRESULT GiveFeedback(
912         [in] DWORD dwEffect);
913 }
914
915
916 /*****************************************************************************
917  * IDropTarget interface
918  */
919 [
920     object,
921     uuid(00000122-0000-0000-c000-000000000046),
922     pointer_default(unique)
923 ]
924 interface IDropTarget : IUnknown
925 {
926     typedef [unique] IDropTarget *LPDROPTARGET;
927
928     const DWORD MK_ALT = 0x20;
929     const DWORD DROPEFFECT_NONE = 0;
930     const DWORD DROPEFFECT_COPY = 1;
931     const DWORD DROPEFFECT_MOVE = 2;
932     const DWORD DROPEFFECT_LINK = 4;
933     const DWORD DROPEFFECT_SCROLL = 0x80000000;
934     const DWORD DD_DEFSCROLLINSET = 11;
935     const DWORD DD_DEFSCROLLDELAY = 50;
936     const DWORD DD_DEFSCROLLINTERVAL = 50;
937     const DWORD DD_DEFDRAGDELAY = 200;
938     const DWORD DD_DEFDRAGMINDIST = 2;
939
940     HRESULT DragEnter(
941         [in, unique] IDataObject *pDataObj,
942         [in] DWORD grfKeyState,
943         [in] POINTL pt,
944         [in, out] DWORD *pdwEffect);
945
946     HRESULT DragOver(
947         [in] DWORD grfKeyState,
948         [in] POINTL pt,
949         [in, out] DWORD *pdwEffect);
950
951     HRESULT DragLeave();
952
953     HRESULT Drop(
954         [in, unique] IDataObject *pDataObj,
955         [in] DWORD grfKeyState,
956         [in] POINTL pt,
957         [in, out] DWORD *pdwEffect);
958 }