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