xref: /reactos/sdk/include/psdk/oleidl.idl (revision c2c66aff)
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
22import "objidl.idl";
23#endif
24
25interface IOleInPlaceActiveObject;
26
27cpp_quote("#include <winuser.h>")
28
29/*****************************************************************************
30 * IOleTypes interface
31 */
32[
33    uuid(b0916c84-7416-101a-bcea-08002b2b79ef)
34]
35interface 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]
68interface 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]
88interface 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
113interface 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 */
137cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
138cpp_quote("#undef TranslateAccelerator")
139cpp_quote("#endif")
140
141/*****************************************************************************
142 * IOleInPlaceFrame interface
143 */
144[
145    object,
146    uuid(00000116-0000-0000-c000-000000000046),
147    pointer_default(unique)
148]
149interface 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]
200interface 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]
243interface 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]
281interface 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]
301interface 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]
322interface 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
342cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
343cpp_quote("#undef GetObject")
344cpp_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]
370interface 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]
428interface 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]
459interface 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]
492interface 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]
537interface 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]
556interface 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]
604interface 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]
751interface 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]
780interface 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]
793interface 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]
883interface 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]
903interface 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]
924interface 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}
959
960/*****************************************************************************
961 * IDropSourceNotify interface
962 */
963[
964    object,
965    uuid(0000012b-0000-0000-c000-000000000046),
966    pointer_default(unique),
967    local
968]
969interface IDropSourceNotify : IUnknown
970{
971    HRESULT DragTargetEnter( [in] HWND hwnd );
972    HRESULT DragTargetLeave( void );
973}
974