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