xref: /reactos/sdk/include/psdk/oledlg.h (revision 8a978a17)
1 /*
2  * Declarations for OLEDLG
3  *
4  * Copyright (C) the Wine project
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 __WINE_OLEDLG_H
22 #define __WINE_OLEDLG_H
23 
24 #ifndef __WINESRC__
25 # include <windows.h>
26 #endif
27 #include <shellapi.h>
28 #include <commdlg.h>
29 #include <ole2.h>
30 #ifndef __WINESRC__
31 # include <string.h>
32 # include <tchar.h>
33 #endif
34 #include <dlgs.h>
35 #include <prsht.h>
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
41 
42 typedef struct IOleUILinkContainerA *POLEUILINKCONTAINERA, *LPOLEUILINKCONTAINERA;
43 typedef struct IOleUILinkContainerW *POLEUILINKCONTAINERW, *LPOLEUILINKCONTAINERW;
44 
45 typedef struct IOleUILinkInfoA *POLEUILINKINFOA, *LPOLEUILINKINFOA;
46 typedef struct IOleUILinkInfoW *POLEUILINKINFOW, *LPOLEUILINKINFOW;
47 
48 typedef struct IOleUIObjInfoA *POLEUIOBJINFOA, *LPOLEUIOBJINFOA;
49 typedef struct IOleUIObjInfoW *POLEUIOBJINFOW, *LPOLEUIOBJINFOW;
50 
51 #define IDC_OLEUIHELP                   99
52 
53 
54 #define OLEUI_ERR_STANDARDMAX           116
55 
56 #define OLEUI_BZERR_HTASKINVALID        (OLEUI_ERR_STANDARDMAX+0)
57 #define OLEUI_BZ_SWITCHTOSELECTED       (OLEUI_ERR_STANDARDMAX+1)
58 #define OLEUI_BZ_RETRYSELECTED          (OLEUI_ERR_STANDARDMAX+2)
59 #define OLEUI_BZ_CALLUNBLOCKED          (OLEUI_ERR_STANDARDMAX+3)
60 
61 #define OLEUI_FALSE   0
62 #define OLEUI_SUCCESS 1 /* Same as OLEUI_OK */
63 #define OLEUI_OK      1 /* OK button pressed */
64 #define OLEUI_CANCEL  2 /* Cancel button pressed */
65 
66 #define OLEUI_ERR_STANDARDMIN           100
67 #define OLEUI_ERR_OLEMEMALLOC           100
68 #define OLEUI_ERR_STRUCTURENULL         101
69 #define OLEUI_ERR_STRUCTUREINVALID      102
70 #define OLEUI_ERR_CBSTRUCTINCORRECT     103
71 #define OLEUI_ERR_HWNDOWNERINVALID      104
72 #define OLEUI_ERR_LPSZCAPTIONINVALID    105
73 #define OLEUI_ERR_LPFNHOOKINVALID       106
74 #define OLEUI_ERR_HINSTANCEINVALID      107
75 #define OLEUI_ERR_LPSZTEMPLATEINVALID   108
76 #define OLEUI_ERR_HRESOURCEINVALID      109
77 #define OLEUI_ERR_FINDTEMPLATEFAILURE   110
78 #define OLEUI_ERR_LOADTEMPLATEFAILURE   111
79 #define OLEUI_ERR_DIALOGFAILURE         112
80 #define OLEUI_ERR_LOCALMEMALLOC         113
81 #define OLEUI_ERR_GLOBALMEMALLOC        114
82 #define OLEUI_ERR_LOADSTRING            115
83 #define OLEUI_ERR_STANDARDMAX           116
84 
85 typedef UINT (CALLBACK *LPFNOLEUIHOOK)(HWND, UINT, WPARAM, LPARAM);
86 
87 /*****************************************************************************
88  * Registered Message Names
89  */
90 #define SZOLEUI_MSG_HELPA              "OLEUI_MSG_HELP"
91 #define SZOLEUI_MSG_ENDDIALOGA         "OLEUI_MSG_ENDDIALOG"
92 #define SZOLEUI_MSG_BROWSEA            "OLEUI_MSG_BROWSE"
93 #define SZOLEUI_MSG_CHANGEICONA        "OLEUI_MSG_CHANGEICON"
94 #define SZOLEUI_MSG_CLOSEBUSYDIALOGA   "OLEUI_MSG_CLOSEBUSYDIALOG"
95 #define SZOLEUI_MSG_CONVERTA           "OLEUI_MSG_CONVERT"
96 #define SZOLEUI_MSG_CHANGESOURCEA      "OLEUI_MSG_CHANGESOURCE"
97 #define SZOLEUI_MSG_ADDCONTROLA        "OLEUI_MSG_ADDCONTROL"
98 #define SZOLEUI_MSG_BROWSE_OFNA        "OLEUI_MSG_BROWSE_OFN"
99 #if defined(__GNUC__)
100 # define SZOLEUI_MSG_HELPW             (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','H','E','L','P',0 }
101 # define SZOLEUI_MSG_ENDDIALOGW        (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','E','N','D','D','I','A','L','O','G',0 }
102 # define SZOLEUI_MSG_BROWSEW           (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E',0 }
103 # define SZOLEUI_MSG_CHANGEICONW       (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','I','C','O','N',0 }
104 # define SZOLEUI_MSG_CLOSEBUSYDIALOGW  (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','L','O','S','E','B','U','S','Y','D','I','A','L','O','G',0 }
105 # define SZOLEUI_MSG_CONVERTW          (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','O','N','V','E','R','T',0 }
106 # define SZOLEUI_MSG_CHANGESOURCEW     (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','S','O','U','R','C','E',0 }
107 # define SZOLEUI_MSG_ADDCONTROLW       (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','A','D','D','C','O','N','T','R','O','L',0 }
108 # define SZOLEUI_MSG_BROWSE_OFNW       (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E','_','O','F','N',0 }
109 #elif defined(_MSC_VER)
110 # define SZOLEUI_MSG_HELPW              L"OLEUI_MSG_HELP"
111 # define SZOLEUI_MSG_ENDDIALOGW         L"OLEUI_MSG_ENDDIALOG"
112 # define SZOLEUI_MSG_BROWSEW            L"OLEUI_MSG_BROWSE"
113 # define SZOLEUI_MSG_CHANGEICONW        L"OLEUI_MSG_CHANGEICON"
114 # define SZOLEUI_MSG_CLOSEBUSYDIALOGW   L"OLEUI_MSG_CLOSEBUSYDIALOG"
115 # define SZOLEUI_MSG_CONVERTW           L"OLEUI_MSG_CONVERT"
116 # define SZOLEUI_MSG_CHANGESOURCEW      L"OLEUI_MSG_CHANGESOURCE"
117 # define SZOLEUI_MSG_ADDCONTROLW        L"OLEUI_MSG_ADDCONTROL"
118 # define SZOLEUI_MSG_BROWSE_OFNW        L"OLEUI_MSG_BROWSE_OFN"
119 #else
120 static const WCHAR SZOLEUI_MSG_HELPW[]             = { 'O','L','E','U','I','_','M','S','G','_','H','E','L','P',0 };
121 static const WCHAR SZOLEUI_MSG_ENDDIALOGW[]        = { 'O','L','E','U','I','_','M','S','G','_','E','N','D','D','I','A','L','O','G',0 };
122 static const WCHAR SZOLEUI_MSG_BROWSEW[]           = { 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E',0 };
123 static const WCHAR SZOLEUI_MSG_CHANGEICONW[]       = { 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','I','C','O','N',0 };
124 static const WCHAR SZOLEUI_MSG_CLOSEBUSYDIALOGW[]  = { 'O','L','E','U','I','_','M','S','G','_','C','L','O','S','E','B','U','S','Y','D','I','A','L','O','G',0 };
125 static const WCHAR SZOLEUI_MSG_CONVERTW[]          = { 'O','L','E','U','I','_','M','S','G','_','C','O','N','V','E','R','T',0 };
126 static const WCHAR SZOLEUI_MSG_CHANGESOURCEW[]     = { 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','S','O','U','R','C','E',0 };
127 static const WCHAR SZOLEUI_MSG_ADDCONTROLW[]       = { 'O','L','E','U','I','_','M','S','G','_','A','D','D','C','O','N','T','R','O','L',0 };
128 static const WCHAR SZOLEUI_MSG_BROWSE_OFNW[]       = { 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E','_','O','F','N',0 };
129 #endif
130 #define SZOLEUI_MSG_HELP             WINELIB_NAME_AW(SZOLEUI_MSG_HELP)
131 #define SZOLEUI_MSG_ENDDIALOG        WINELIB_NAME_AW(SZOLEUI_MSG_ENDDIALOG)
132 #define SZOLEUI_MSG_BROWSE           WINELIB_NAME_AW(SZOLEUI_MSG_BROWSE)
133 #define SZOLEUI_MSG_CHANGEICON       WINELIB_NAME_AW(SZOLEUI_MSG_CHANGEICON)
134 #define SZOLEUI_MSG_CLOSEBUSYDIALOG  WINELIB_NAME_AW(SZOLEUI_MSG_CLOSEBUSYDIALOG)
135 #define SZOLEUI_MSG_CONVERT          WINELIB_NAME_AW(SZOLEUI_MSG_CONVERT)
136 #define SZOLEUI_MSG_CHANGESOURCE     WINELIB_NAME_AW(SZOLEUI_MSG_CHANGESOURCE)
137 #define SZOLEUI_MSG_ADDCONTROL       WINELIB_NAME_AW(SZOLEUI_MSG_ADDCONTROL)
138 #define SZOLEUI_MSG_BROWSE_OFN       WINELIB_NAME_AW(SZOLEUI_MSG_BROWSE_OFN)
139 
140 
141 /*****************************************************************************
142  * INSERT OBJECT DIALOG
143  */
144 typedef struct tagOLEUIINSERTOBJECTA
145 {
146     DWORD           cbStruct;
147     DWORD           dwFlags;
148     HWND            hWndOwner;
149     LPCSTR          lpszCaption;
150     LPFNOLEUIHOOK   lpfnHook;
151     LPARAM          lCustData;
152     HINSTANCE       hInstance;
153     LPCSTR          lpszTemplate;
154     HRSRC           hResource;
155     CLSID           clsid;
156     LPSTR           lpszFile;
157     UINT            cchFile;
158     UINT            cClsidExclude;
159     LPCLSID         lpClsidExclude;
160     IID             iid;
161     DWORD           oleRender;
162     LPFORMATETC     lpFormatEtc;
163     LPOLECLIENTSITE lpIOleClientSite;
164     LPSTORAGE       lpIStorage;
165     LPVOID          *ppvObj;
166     SCODE           sc;
167     HGLOBAL         hMetaPict;
168 } OLEUIINSERTOBJECTA, *POLEUIINSERTOBJECTA, *LPOLEUIINSERTOBJECTA;
169 
170 typedef struct tagOLEUIINSERTOBJECTW
171 {
172     DWORD           cbStruct;
173     DWORD           dwFlags;
174     HWND            hWndOwner;
175     LPCWSTR         lpszCaption;
176     LPFNOLEUIHOOK   lpfnHook;
177     LPARAM          lCustData;
178     HINSTANCE       hInstance;
179     LPCWSTR         lpszTemplate;
180     HRSRC           hResource;
181     CLSID           clsid;
182     LPWSTR          lpszFile;
183     UINT            cchFile;
184     UINT            cClsidExclude;
185     LPCLSID         lpClsidExclude;
186     IID             iid;
187     DWORD           oleRender;
188     LPFORMATETC     lpFormatEtc;
189     LPOLECLIENTSITE lpIOleClientSite;
190     LPSTORAGE       lpIStorage;
191     LPVOID          *ppvObj;
192     SCODE           sc;
193     HGLOBAL         hMetaPict;
194 } OLEUIINSERTOBJECTW, *POLEUIINSERTOBJECTW, *LPOLEUIINSERTOBJECTW;
195 
196 DECL_WINELIB_TYPE_AW(OLEUIINSERTOBJECT)
197 DECL_WINELIB_TYPE_AW(POLEUIINSERTOBJECT)
198 DECL_WINELIB_TYPE_AW(LPOLEUIINSERTOBJECT)
199 
200 #define IOF_SHOWHELP                    0x00000001L
201 #define IOF_SELECTCREATENEW             0x00000002L
202 #define IOF_SELECTCREATEFROMFILE        0x00000004L
203 #define IOF_CHECKLINK                   0x00000008L
204 #define IOF_CHECKDISPLAYASICON          0x00000010L
205 #define IOF_CREATENEWOBJECT             0x00000020L
206 #define IOF_CREATEFILEOBJECT            0x00000040L
207 #define IOF_CREATELINKOBJECT            0x00000080L
208 #define IOF_DISABLELINK                 0x00000100L
209 #define IOF_VERIFYSERVERSEXIST          0x00000200L
210 #define IOF_DISABLEDISPLAYASICON        0x00000400L
211 #define IOF_HIDECHANGEICON              0x00000800L
212 #define IOF_SHOWINSERTCONTROL           0x00001000L
213 #define IOF_SELECTCREATECONTROL         0x00002000L
214 
215 /*****************************************************************************
216  * CONVERT DIALOG
217  */
218 typedef struct tagOLEUICONVERTA
219 {
220     DWORD           cbStruct;
221     DWORD           dwFlags;
222     HWND            hWndOwner;
223     LPCSTR          lpszCaption;
224     LPFNOLEUIHOOK   lpfnHook;
225     LPARAM          lCustData;
226     HINSTANCE       hInstance;
227     LPCSTR          lpszTemplate;
228     HRSRC           hResource;
229     CLSID           clsid;
230     CLSID           clsidConvertDefault;
231     CLSID           clsidActivateDefault;
232     CLSID           clsidNew;
233     DWORD           dvAspect;
234     WORD            wFormat;
235     BOOL            fIsLinkedObject;
236     HGLOBAL         hMetaPict;
237     LPSTR           lpszUserType;
238     BOOL            fObjectsIconChanged;
239     LPSTR           lpszDefLabel;
240     UINT            cClsidExclude;
241     LPCLSID         lpClsidExclude;
242 } OLEUICONVERTA, *POLEUICONVERTA, *LPOLEUICONVERTA;
243 
244 typedef struct tagOLEUICONVERTW
245 {
246     DWORD           cbStruct;
247     DWORD           dwFlags;
248     HWND            hWndOwner;
249     LPCWSTR         lpszCaption;
250     LPFNOLEUIHOOK   lpfnHook;
251     LPARAM          lCustData;
252     HINSTANCE       hInstance;
253     LPCWSTR         lpszTemplate;
254     HRSRC           hResource;
255     CLSID           clsid;
256     CLSID           clsidConvertDefault;
257     CLSID           clsidActivateDefault;
258     CLSID           clsidNew;
259     DWORD           dvAspect;
260     WORD            wFormat;
261     BOOL            fIsLinkedObject;
262     HGLOBAL         hMetaPict;
263     LPWSTR          lpszUserType;
264     BOOL            fObjectsIconChanged;
265     LPWSTR          lpszDefLabel;
266     UINT            cClsidExclude;
267     LPCLSID         lpClsidExclude;
268 } OLEUICONVERTW, *POLEUICONVERTW, *LPOLEUICONVERTW;
269 
270 DECL_WINELIB_TYPE_AW(OLEUICONVERT)
271 DECL_WINELIB_TYPE_AW(POLEUICONVERT)
272 DECL_WINELIB_TYPE_AW(LPOLEUICONVERT)
273 
274 #define CF_SHOWHELPBUTTON               0x00000001L
275 #define CF_SETCONVERTDEFAULT            0x00000002L
276 #define CF_SETACTIVATEDEFAULT           0x00000004L
277 #define CF_SELECTCONVERTTO              0x00000008L
278 #define CF_SELECTACTIVATEAS             0x00000010L
279 #define CF_DISABLEDISPLAYASICON         0x00000020L
280 #define CF_DISABLEACTIVATEAS            0x00000040L
281 #define CF_HIDECHANGEICON               0x00000080L
282 #define CF_CONVERTONLY                  0x00000100L
283 
284 /*****************************************************************************
285  * CHANGE ICON DIALOG
286  */
287 typedef struct tagOLEUICHANGEICONA
288 {
289     DWORD           cbStruct;
290     DWORD           dwFlags;
291     HWND            hWndOwner;
292     LPCSTR          lpszCaption;
293     LPFNOLEUIHOOK   lpfnHook;
294     LPARAM          lCustData;
295     HINSTANCE       hInstance;
296     LPCSTR          lpszTemplate;
297     HRSRC           hResource;
298     HGLOBAL         hMetaPict;
299     CLSID           clsid;
300     CHAR            szIconExe[MAX_PATH];
301     INT             cchIconExe;
302 } OLEUICHANGEICONA, *POLEUICHANGEICONA, *LPOLEUICHANGEICONA;
303 
304 typedef struct tagOLEUICHANGEICONW
305 {
306     DWORD           cbStruct;
307     DWORD           dwFlags;
308     HWND            hWndOwner;
309     LPCWSTR         lpszCaption;
310     LPFNOLEUIHOOK   lpfnHook;
311     LPARAM          lCustData;
312     HINSTANCE       hInstance;
313     LPCWSTR         lpszTemplate;
314     HRSRC           hResource;
315     HGLOBAL         hMetaPict;
316     CLSID           clsid;
317     WCHAR           szIconExe[MAX_PATH];
318     INT             cchIconExe;
319 } OLEUICHANGEICONW, *POLEUICHANGEICONW, *LPOLEUICHANGEICONW;
320 
321 DECL_WINELIB_TYPE_AW(OLEUICHANGEICON)
322 DECL_WINELIB_TYPE_AW(POLEUICHANGEICON)
323 DECL_WINELIB_TYPE_AW(LPOLEUICHANGEICON)
324 
325 
326 #define CIF_SHOWHELP                    0x00000001L
327 #define CIF_SELECTCURRENT               0x00000002L
328 #define CIF_SELECTDEFAULT               0x00000004L
329 #define CIF_SELECTFROMFILE              0x00000008L
330 #define CIF_USEICONEXE                  0x00000010L
331 
332 /*****************************************************************************
333  * PASTE SPECIAL DIALOG
334  */
335 
336 typedef enum tagOLEUIPASTEFLAG
337 {
338    OLEUIPASTE_ENABLEICON    = 2048,
339    OLEUIPASTE_PASTEONLY     = 0,
340    OLEUIPASTE_PASTE         = 512,
341    OLEUIPASTE_LINKANYTYPE   = 1024,
342    OLEUIPASTE_LINKTYPE1     = 1,
343    OLEUIPASTE_LINKTYPE2     = 2,
344    OLEUIPASTE_LINKTYPE3     = 4,
345    OLEUIPASTE_LINKTYPE4     = 8,
346    OLEUIPASTE_LINKTYPE5     = 16,
347    OLEUIPASTE_LINKTYPE6     = 32,
348    OLEUIPASTE_LINKTYPE7     = 64,
349    OLEUIPASTE_LINKTYPE8     = 128
350 } OLEUIPASTEFLAG;
351 
352 typedef struct tagOLEUIPASTEENTRYA
353 {
354    FORMATETC        fmtetc;
355    LPCSTR           lpstrFormatName;
356    LPCSTR           lpstrResultText;
357    DWORD            dwFlags;
358    DWORD            dwScratchSpace;
359 } OLEUIPASTEENTRYA, *POLEUIPASTEENTRYA, *LPOLEUIPASTEENTRYA;
360 
361 typedef struct tagOLEUIPASTEENTRYW
362 {
363    FORMATETC        fmtetc;
364    LPCWSTR          lpstrFormatName;
365    LPCWSTR          lpstrResultText;
366    DWORD            dwFlags;
367    DWORD            dwScratchSpace;
368 } OLEUIPASTEENTRYW, *POLEUIPASTEENTRYW, *LPOLEUIPASTEENTRYW;
369 
370 DECL_WINELIB_TYPE_AW(OLEUIPASTEENTRY)
371 DECL_WINELIB_TYPE_AW(POLEUIPASTEENTRY)
372 DECL_WINELIB_TYPE_AW(LPOLEUIPASTEENTRY)
373 
374 typedef struct tagOLEUIPASTESPECIALA
375 {
376     DWORD           cbStruct;
377     DWORD           dwFlags;
378     HWND            hWndOwner;
379     LPCSTR          lpszCaption;
380     LPFNOLEUIHOOK   lpfnHook;
381     LPARAM          lCustData;
382     HINSTANCE       hInstance;
383     LPCSTR          lpszTemplate;
384     HRSRC           hResource;
385     LPDATAOBJECT    lpSrcDataObj;
386     LPOLEUIPASTEENTRYA arrPasteEntries;
387     INT             cPasteEntries;
388     UINT*           arrLinkTypes;
389     INT             cLinkTypes;
390     UINT            cClsidExclude;
391     LPCLSID         lpClsidExclude;
392     INT             nSelectedIndex;
393     BOOL            fLink;
394     HGLOBAL         hMetaPict;
395     SIZEL           sizel;
396 } OLEUIPASTESPECIALA, *POLEUIPASTESPECIALA, *LPOLEUIPASTESPECIALA;
397 
398 typedef struct tagOLEUIPASTESPECIALW
399 {
400     DWORD           cbStruct;
401     DWORD           dwFlags;
402     HWND            hWndOwner;
403     LPCWSTR         lpszCaption;
404     LPFNOLEUIHOOK   lpfnHook;
405     LPARAM          lCustData;
406     HINSTANCE       hInstance;
407     LPCWSTR         lpszTemplate;
408     HRSRC           hResource;
409     LPDATAOBJECT    lpSrcDataObj;
410     LPOLEUIPASTEENTRYW arrPasteEntries;
411     INT             cPasteEntries;
412     UINT*           arrLinkTypes;
413     INT             cLinkTypes;
414     UINT            cClsidExclude;
415     LPCLSID         lpClsidExclude;
416     INT             nSelectedIndex;
417     BOOL            fLink;
418     HGLOBAL         hMetaPict;
419     SIZEL           sizel;
420 } OLEUIPASTESPECIALW, *POLEUIPASTESPECIALW, *LPOLEUIPASTESPECIALW;
421 
422 DECL_WINELIB_TYPE_AW(OLEUIPASTESPECIAL)
423 DECL_WINELIB_TYPE_AW(POLEUIPASTESPECIAL)
424 DECL_WINELIB_TYPE_AW(LPOLEUIPASTESPECIAL)
425 
426 #define PS_MAXLINKTYPES                 8
427 
428 #define PSF_SHOWHELP                    0x00000001L
429 #define PSF_SELECTPASTE                 0x00000002L
430 #define PSF_SELECTPASTELINK             0x00000004L
431 
432 #define PSF_CHECKDISPLAYASICON          0x00000008L
433 #define PSF_DISABLEDISPLAYASICON        0x00000010L
434 #define PSF_HIDECHANGEICON              0x00000020L
435 #define PSF_STAYONCLIPBOARDCHANGE       0x00000040L
436 #define PSF_NOREFRESHDATAOBJECT         0x00000080L
437 
438 #define OLEUI_IOERR_SRCDATAOBJECTINVALID    (OLEUI_ERR_STANDARDMAX+0)
439 #define OLEUI_IOERR_ARRPASTEENTRIESINVALID  (OLEUI_ERR_STANDARDMAX+1)
440 #define OLEUI_IOERR_ARRLINKTYPESINVALID     (OLEUI_ERR_STANDARDMAX+2)
441 #define OLEUI_PSERR_CLIPBOARDCHANGED        (OLEUI_ERR_STANDARDMAX+3)
442 #define OLEUI_PSERR_GETCLIPBOARDFAILED      (OLEUI_ERR_STANDARDMAX+4)
443 
444 /* Paste Special dialog resource ids */
445 #define IDD_PASTESPECIAL       1003
446 #define IDD_PASTESPECIAL4      1108
447 
448 /* Paste Special dialog control ids */
449 #define IDC_PS_PASTE           500
450 #define IDC_PS_PASTELINK       501
451 #define IDC_PS_SOURCETEXT      502
452 #define IDC_PS_PASTELIST       503
453 #define IDC_PS_PASTELINKLIST   504
454 #define IDC_PS_DISPLAYLIST     505
455 #define IDC_PS_DISPLAYASICON   506
456 #define IDC_PS_ICONDISPLAY     507
457 #define IDC_PS_CHANGEICON      508
458 #define IDC_PS_RESULTIMAGE     509
459 #define IDC_PS_RESULTTEXT      510
460 
461 /*****************************************************************************
462  * EDIT LINKS DIALOG
463  */
464 
465 #define ELF_SHOWHELP               0x00000001L
466 #define ELF_DISABLEUPDATENOW       0x00000002L
467 #define ELF_DISABLEOPENSOURCE      0x00000004L
468 #define ELF_DISABLECHANGESOURCE    0x00000008L
469 #define ELF_DISABLECANCELLINK      0x00000010L
470 
471 typedef struct tagOLEUIEDITLINKSW
472 {
473     DWORD           cbStruct;
474     DWORD           dwFlags;
475     HWND            hWndOwner;
476     LPCWSTR         lpszCaption;
477     LPFNOLEUIHOOK   lpfnHook;
478     LPARAM          lCustData;
479     HINSTANCE       hInstance;
480     LPCWSTR         lpszTemplate;
481     HRSRC           hResource;
482     LPOLEUILINKCONTAINERW lpOleUILinkContainer;
483 } OLEUIEDITLINKSW, *POLEUIEDITLINKSW, *LPOLEUIEDITLINKSW;
484 
485 typedef struct tagOLEUIEDITLINKSA
486 {
487     DWORD           cbStruct;
488     DWORD           dwFlags;
489     HWND            hWndOwner;
490     LPCSTR          lpszCaption;
491     LPFNOLEUIHOOK   lpfnHook;
492     LPARAM          lCustData;
493     HINSTANCE       hInstance;
494     LPCSTR          lpszTemplate;
495     HRSRC           hResource;
496     LPOLEUILINKCONTAINERA lpOleUILinkContainer;
497 } OLEUIEDITLINKSA, *POLEUIEDITLINKSA, *LPOLEUIEDITLINKSA;
498 
499 DECL_WINELIB_TYPE_AW(OLEUIEDITLINKS)
500 DECL_WINELIB_TYPE_AW(POLEUIEDITLINKS)
501 DECL_WINELIB_TYPE_AW(LPOLEUIEDITLINKS)
502 
503 
504 /***********************************************************************************
505  * BUSY DIALOG
506  */
507 typedef struct tagOLEUIBUSYA
508 {
509     DWORD           cbStruct;
510     DWORD           dwFlags;
511     HWND            hWndOwner;
512     LPCSTR          lpszCaption;
513     LPFNOLEUIHOOK   lpfnHook;
514     LPARAM          lCustData;
515     HINSTANCE       hInstance;
516     LPCSTR          lpszTemplate;
517     HRSRC           hResource;
518     HTASK           hTask;
519     HWND*           lphWndDialog;
520 } OLEUIBUSYA, *POLEUIBUSYA, *LPOLEUIBUSYA;
521 
522 typedef struct tagOLEUIBUSYW
523 {
524     DWORD           cbStruct;
525     DWORD           dwFlags;
526     HWND            hWndOwner;
527     LPCWSTR         lpszCaption;
528     LPFNOLEUIHOOK   lpfnHook;
529     LPARAM          lCustData;
530     HINSTANCE       hInstance;
531     LPCWSTR         lpszTemplate;
532     HRSRC           hResource;
533     HTASK           hTask;
534     HWND*           lphWndDialog;
535 } OLEUIBUSYW, *POLEUIBUSYW, *LPOLEUIBUSYW;
536 
537 DECL_WINELIB_TYPE_AW(OLEUIBUSY)
538 DECL_WINELIB_TYPE_AW(POLEUIBUSY)
539 DECL_WINELIB_TYPE_AW(LPOLEUIBUSY)
540 
541 
542 #define BZ_DISABLECANCELBUTTON          0x00000001L
543 #define BZ_DISABLESWITCHTOBUTTON        0x00000002L
544 #define BZ_DISABLERETRYBUTTON           0x00000004L
545 #define BZ_NOTRESPONDINGDIALOG          0x00000008L
546 
547 /***********************************************************************************
548  * OBJECT PROPERTIES DIALOG
549  */
550 
551 struct tagOLEUIOBJECTPROPSW;
552 struct tagOLEUIOBJECTPROPSA;
553 
554 typedef struct tagOLEUIGNRLPROPSA
555 {
556     DWORD           cbStruct;
557     DWORD           dwFlags;
558     DWORD           dwReserved1[2];
559     LPFNOLEUIHOOK   lpfnHook;
560     LPARAM          lCustData;
561     DWORD           dwReserved2[3];
562     struct tagOLEUIOBJECTPROPSA* lpOP;
563 
564 } OLEUIGNRLPROPSA, *POLEUIGNRLPROPSA, *LPOLEUIGNRLPROPSA;
565 
566 typedef struct tagOLEUIGNRLPROPSW
567 {
568     DWORD           cbStruct;
569     DWORD           dwFlags;
570     DWORD           dwReserved1[2];
571     LPFNOLEUIHOOK   lpfnHook;
572     LPARAM          lCustData;
573     DWORD           dwReserved2[3];
574     struct tagOLEUIOBJECTPROPSW* lpOP;
575 } OLEUIGNRLPROPSW, *POLEUIGNRLPROPSW, *LPOLEUIGNRLPROPSW;
576 
577 DECL_WINELIB_TYPE_AW(OLEUIGNRLPROPS)
578 DECL_WINELIB_TYPE_AW(POLEUIGNRLPROPS)
579 DECL_WINELIB_TYPE_AW(LPOLEUIGNRLPROPS)
580 
581 typedef struct tagOLEUIVIEWPROPSA
582 {
583     DWORD           cbStruct;
584     DWORD           dwFlags;
585     DWORD           dwReserved1[2];
586     LPFNOLEUIHOOK   lpfnHook;
587     LPARAM          lCustData;
588     DWORD           dwReserved2[3];
589     struct tagOLEUIOBJECTPROPSA* lpOP;
590     INT             nScaleMin;
591     INT             nScaleMax;
592 } OLEUIVIEWPROPSA, *POLEUIVIEWPROPSA, *LPOLEUIVIEWPROPSA;
593 
594 typedef struct tagOLEUIVIEWPROPSW
595 {
596     DWORD           cbStruct;
597     DWORD           dwFlags;
598     DWORD           dwReserved1[2];
599     LPFNOLEUIHOOK   lpfnHook;
600     LPARAM          lCustData;
601     DWORD           dwReserved2[3];
602     struct tagOLEUIOBJECTPROPSW* lpOP;
603     INT             nScaleMin;
604     INT             nScaleMax;
605 } OLEUIVIEWPROPSW, *POLEUIVIEWPROPSW, *LPOLEUIVIEWPROPSW;
606 
607 DECL_WINELIB_TYPE_AW(OLEUIVIEWPROPS)
608 DECL_WINELIB_TYPE_AW(POLEUIVIEWPROPS)
609 DECL_WINELIB_TYPE_AW(LPOLEUIVIEWPROPS)
610 
611 
612 #define VPF_SELECTRELATIVE          0x00000001L
613 #define VPF_DISABLERELATIVE         0x00000002L
614 #define VPF_DISABLESCALE            0x00000004L
615 
616 typedef struct tagOLEUILINKPROPSA
617 {
618     DWORD           cbStruct;
619     DWORD           dwFlags;
620     DWORD           dwReserved1[2];
621     LPFNOLEUIHOOK   lpfnHook;
622     LPARAM          lCustData;
623     DWORD           dwReserved2[3];
624     struct tagOLEUIOBJECTPROPSA* lpOP;
625 } OLEUILINKPROPSA, *POLEUILINKPROPSA, *LPOLEUILINKPROPSA;
626 
627 typedef struct tagOLEUILINKPROPSW
628 {
629     DWORD           cbStruct;
630     DWORD           dwFlags;
631     DWORD           dwReserved1[2];
632     LPFNOLEUIHOOK   lpfnHook;
633     LPARAM          lCustData;
634     DWORD           dwReserved2[3];
635     struct tagOLEUIOBJECTPROPSW* lpOP;
636 } OLEUILINKPROPSW, *POLEUILINKPROPSW, *LPOLEUILINKPROPSW;
637 
638 DECL_WINELIB_TYPE_AW(OLEUILINKPROPS)
639 DECL_WINELIB_TYPE_AW(POLEUILINKPROPS)
640 DECL_WINELIB_TYPE_AW(LPOLEUILINKPROPS)
641 
642 typedef struct tagOLEUIOBJECTPROPSA
643 {
644     DWORD                cbStruct;
645     DWORD                dwFlags;
646     LPPROPSHEETHEADERA   lpPS;
647     DWORD                dwObject;
648     LPOLEUIOBJINFOA      lpObjInfo;
649     DWORD                dwLink;
650     LPOLEUILINKINFOA     lpLinkInfo;
651     LPOLEUIGNRLPROPSA    lpGP;
652     LPOLEUIVIEWPROPSA    lpVP;
653     LPOLEUILINKPROPSA    lpLP;
654 } OLEUIOBJECTPROPSA, *POLEUIOBJECTPROPSA, *LPOLEUIOBJECTPROPSA;
655 
656 typedef struct tagOLEUIOBJECTPROPSW
657 {
658     DWORD                cbStruct;
659     DWORD                dwFlags;
660     LPPROPSHEETHEADERW   lpPS;
661     DWORD                dwObject;
662     LPOLEUIOBJINFOW      lpObjInfo;
663     DWORD                dwLink;
664     LPOLEUILINKINFOW     lpLinkInfo;
665     LPOLEUIGNRLPROPSW    lpGP;
666     LPOLEUIVIEWPROPSW    lpVP;
667     LPOLEUILINKPROPSW    lpLP;
668 } OLEUIOBJECTPROPSW, *POLEUIOBJECTPROPSW, *LPOLEUIOBJECTPROPSW;
669 
670 DECL_WINELIB_TYPE_AW(OLEUIOBJECTPROPS)
671 DECL_WINELIB_TYPE_AW(POLEUIOBJECTPROPS)
672 DECL_WINELIB_TYPE_AW(LPOLEUIOBJECTPROPS)
673 
674 #define OPF_OBJECTISLINK                0x00000001L
675 #define OPF_NOFILLDEFAULT               0x00000002L
676 #define OPF_SHOWHELP                    0x00000004L
677 #define OPF_DISABLECONVERT              0x00000008L
678 
679 
680 /************************************************************************************
681  * CHANGE SOURCE DIALOG
682  */
683 
684 
685 typedef struct tagOLEUICHANGESOURCEW
686 {
687     DWORD           cbStruct;
688     DWORD           dwFlags;
689     HWND            hWndOwner;
690     LPCWSTR         lpszCaption;
691     LPFNOLEUIHOOK   lpfnHook;
692     LPARAM          lCustData;
693     HINSTANCE       hInstance;
694     LPCWSTR         lpszTemplate;
695     HRSRC           hResource;
696     OPENFILENAMEW*lpOFN;
697     DWORD           dwReserved1[4];
698     LPOLEUILINKCONTAINERW lpOleUILinkContainer;
699     DWORD           dwLink;
700     LPWSTR          lpszDisplayName;
701     ULONG           nFileLength;
702     LPWSTR          lpszFrom;
703     LPWSTR          lpszTo;
704 } OLEUICHANGESOURCEW, *POLEUICHANGESOURCEW, *LPOLEUICHANGESOURCEW;
705 
706 
707 typedef struct tagOLEUICHANGESOURCEA
708 {
709     DWORD           cbStruct;
710     DWORD           dwFlags;
711     HWND            hWndOwner;
712     LPCSTR          lpszCaption;
713     LPFNOLEUIHOOK   lpfnHook;
714     LPARAM          lCustData;
715     HINSTANCE       hInstance;
716     LPCSTR          lpszTemplate;
717     HRSRC           hResource;
718     OPENFILENAMEA*  lpOFN;
719     DWORD           dwReserved1[4];
720     LPOLEUILINKCONTAINERA lpOleUILinkContainer;
721     DWORD           dwLink;
722     LPSTR           lpszDisplayName;
723     ULONG           nFileLength;
724     LPSTR           lpszFrom;
725     LPSTR           lpszTo;
726 } OLEUICHANGESOURCEA, *POLEUICHANGESOURCEA, *LPOLEUICHANGESOURCEA;
727 
728 
729 DECL_WINELIB_TYPE_AW(OLEUICHANGESOURCE)
730 DECL_WINELIB_TYPE_AW(POLEUICHANGESOURCE)
731 DECL_WINELIB_TYPE_AW(LPOLEUICHANGESOURCE)
732 
733 /* Change Source Dialog flags */
734 #define CSF_SHOWHELP                    0x00000001L
735 #define CSF_VALIDSOURCE                 0x00000002L
736 #define CSF_ONLYGETSOURCE               0x00000004L
737 #define CSF_EXPLORER                    0x00000008L
738 
739 
740 /*****************************************************************************
741  * IOleUILinkContainer interface
742  */
743 #define INTERFACE   IOleUILinkContainerA
744 DECLARE_INTERFACE_(IOleUILinkContainerA,IUnknown)
745 {
746     /*** IUnknown methods ***/
747     STDMETHOD_(HRESULT,QueryInterface)(THIS_
748         _In_ REFIID riid,
749         _Outptr_ void** ppvObject) PURE;
750     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
751     STDMETHOD_(ULONG,Release)(THIS) PURE;
752     /*** IOleUILinkContainerA methods ***/
753     STDMETHOD_(DWORD,GetNextLink)(THIS_ _In_ DWORD dwLink) PURE;
754     STDMETHOD(SetLinkUpdateOptions)(THIS_
755         _In_ DWORD dwLink,
756         _In_ DWORD dwUpdateOpt) PURE;
757     STDMETHOD(GetLinkUpdateOptions)(THIS_
758         _In_ DWORD dwLink,
759         _Out_ DWORD *lpdwUpdateOpt) PURE;
760     STDMETHOD(SetLinkSource)(THIS_
761         _In_ DWORD dwLink,
762         _In_ LPSTR lpszDisplayName,
763         _In_ ULONG lenFileName,
764         _Out_ ULONG *pchEaten,
765         _In_ BOOL fValidateSource) PURE;
766     STDMETHOD(GetLinkSource)(THIS_
767         _In_ DWORD dwLink,
768         _Outptr_opt_result_maybenull_ LPSTR *lplpszDisplayName,
769         _Out_ ULONG *lplenFileName,
770         _Outptr_opt_result_maybenull_ LPSTR *lplpszFullLinkType,
771         _Outptr_opt_result_maybenull_ LPSTR *lplpszShortLinkType,
772         _Out_ BOOL *lpfSourceAvailable,
773         _Out_ BOOL *lpfIsSelected) PURE;
774     STDMETHOD(OpenLinkSource)(THIS_ _In_ DWORD dwLink) PURE;
775     STDMETHOD(UpdateLink)(THIS_
776         _In_ DWORD dwLink,
777         _In_ BOOL fErrorMessage,
778         _In_ BOOL fReserved) PURE;
779     STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
780 };
781 #undef INTERFACE
782 
783 #define INTERFACE   IOleUILinkContainerW
784 DECLARE_INTERFACE_(IOleUILinkContainerW,IUnknown)
785 {
786     /*** IUnknown methods ***/
787     STDMETHOD_(HRESULT,QueryInterface)(THIS_
788         _In_ REFIID riid,
789         _Outptr_ void** ppvObject) PURE;
790     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
791     STDMETHOD_(ULONG,Release)(THIS) PURE;
792     /*** IOleUILinkContainerW methods ***/
793     STDMETHOD_(DWORD,GetNextLink)(THIS_ _In_ DWORD dwLink) PURE;
794     STDMETHOD(SetLinkUpdateOptions)(THIS_
795         _In_ DWORD dwLink,
796         _In_ DWORD dwUpdateOpt) PURE;
797     STDMETHOD(GetLinkUpdateOptions)(THIS_
798         _In_ DWORD dwLink,
799         _Out_ DWORD *lpdwUpdateOpt) PURE;
800     STDMETHOD(SetLinkSource)(THIS_
801         _In_ DWORD dwLink,
802         _In_ LPWSTR lpszDisplayName,
803         _In_ ULONG lenFileName,
804         _Out_ ULONG *pchEaten,
805         _In_ BOOL fValidateSource) PURE;
806     STDMETHOD(GetLinkSource)(THIS_
807         _In_ DWORD dwLink,
808         _Outptr_opt_result_maybenull_ LPWSTR *lplpszDisplayName,
809         _Out_ ULONG *lplenFileName,
810         _Outptr_opt_result_maybenull_ LPWSTR *lplpszFullLinkType,
811         _Outptr_opt_result_maybenull_ LPWSTR *lplpszShortLinkType,
812         _Out_ BOOL *lpfSourceAvailable,
813         _Out_ BOOL *lpfIsSelected) PURE;
814     STDMETHOD(OpenLinkSource)(THIS_ _In_ DWORD dwLink) PURE;
815     STDMETHOD(UpdateLink)(THIS_
816         _In_ DWORD dwLink,
817         _In_ BOOL fErrorMessage,
818         _In_ BOOL fReserved) PURE;
819     STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
820 };
821 #undef INTERFACE
822 
823 DECL_WINELIB_TYPE_AW(IOleUILinkContainer)
824 DECL_WINELIB_TYPE_AW(POLEUILINKCONTAINER)
825 DECL_WINELIB_TYPE_AW(LPOLEUILINKCONTAINER)
826 
827 #if !defined(__cplusplus) || defined(CINTERFACE)
828 /*** IUnknown methods ***/
829 #define IOleUILinkContainer_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)
830 #define IOleUILinkContainer_AddRef(p)                      (p)->lpVtbl->AddRef(p)
831 #define IOleUILinkContainer_Release(p)                     (p)->lpVtbl->Release(p)
832 /*** IOleUILinkContainer methods ***/
833 #define IOleUILinkContainer_GetNextLink(p,a)               (p)->lpVtbl->GetNextLink(p,a)
834 #define IOleUILinkContainer_SetLinkUpdateOptions(p,a,b)    (p)->lpVtbl->SetLinkUpdateOptions(p,a,b)
835 #define IOleUILinkContainer_GetLinkUpdateOptions(p,a,b)    (p)->lpVtbl->GetLinkUpdateOptions(p,a,b)
836 #define IOleUILinkContainer_SetLinkSource(p,a,b,c,d,e)     (p)->lpVtbl->SetLinkSource(p,a,b,c,d,e)
837 #define IOleUILinkContainer_GetLinkSource(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetLinkSource(p,a,b,c,d,e,f,g)
838 #define IOleUILinkContainer_OpenLinkSource(p,a)            (p)->lpVtbl->OpenLinkSource(p,a)
839 #define IOleUILinkContainer_UpdateLink(p,a,b,c)            (p)->lpVtbl->UpdateLink(p,a,b,c)
840 #define IOleUILinkContainer_CancelLink(p,a)                (p)->lpVtbl->CancelLink(p,a)
841 #endif
842 
843 
844 /*****************************************************************************
845  * IOleUILinkInfo interface
846  */
847 #define INTERFACE   IOleUILinkInfoA
848 DECLARE_INTERFACE_(IOleUILinkInfoA,IOleUILinkContainerA)
849 {
850     /*** IUnknown methods ***/
851     STDMETHOD_(HRESULT, QueryInterface)(THIS_
852         _In_ REFIID riid,
853         _Outptr_ void** ppvObject) PURE;
854     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
855     STDMETHOD_(ULONG,Release)(THIS) PURE;
856     /*** IOleUILinkContainerA methods ***/
857     STDMETHOD_(DWORD, GetNextLink)(THIS_ _In_ DWORD dwLink) PURE;
858     STDMETHOD(SetLinkUpdateOptions)(THIS_
859         _In_ DWORD dwLink,
860         _In_ DWORD dwUpdateOpt) PURE;
861     STDMETHOD(GetLinkUpdateOptions)(THIS_
862         _In_ DWORD dwLink,
863         _Out_ DWORD *lpdwUpdateOpt) PURE;
864     STDMETHOD(SetLinkSource)(THIS_
865         _In_ DWORD dwLink,
866         _In_ LPSTR lpszDisplayName,
867         _In_ ULONG lenFileName,
868         _Out_ ULONG *pchEaten,
869         _In_ BOOL fValidateSource) PURE;
870     STDMETHOD(GetLinkSource)(THIS_
871         _In_ DWORD dwLink,
872         _Outptr_opt_result_maybenull_ LPSTR *lplpszDisplayName,
873         _Out_ ULONG *lplenFileName,
874         _Outptr_opt_result_maybenull_ LPSTR *lplpszFullLinkType,
875         _Outptr_opt_result_maybenull_ LPSTR *lplpszShortLinkType,
876         _Out_ BOOL *lpfSourceAvailable,
877         _Out_ BOOL *lpfIsSelected) PURE;
878     STDMETHOD(OpenLinkSource)(THIS_ _In_ DWORD dwLink) PURE;
879     STDMETHOD(UpdateLink)(THIS_
880         _In_ DWORD dwLink,
881         _In_ BOOL fErrorMessage,
882         _In_ BOOL fReserved) PURE;
883     STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
884     /*** IOleUILinkInfoA methods ***/
885     STDMETHOD(GetLastUpdate)(THIS_
886         _In_ DWORD dwLink,
887         _Out_ FILETIME *lpLastUpdate) PURE;
888 };
889 #undef INTERFACE
890 
891 #define INTERFACE   IOleUILinkInfoW
892 DECLARE_INTERFACE_(IOleUILinkInfoW,IOleUILinkContainerW)
893 {
894     /*** IUnknown methods ***/
895     STDMETHOD_(HRESULT,QueryInterface)(THIS_
896         _In_ REFIID riid,
897         _Outptr_ void** ppvObject) PURE;
898     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
899     STDMETHOD_(ULONG,Release)(THIS) PURE;
900     /*** IOleUILinkContainerW methods ***/
901     STDMETHOD_(DWORD, GetNextLink)(THIS_ _In_ DWORD dwLink) PURE;
902     STDMETHOD(SetLinkUpdateOptions)(THIS_
903         _In_ DWORD dwLink,
904         _In_ DWORD dwUpdateOpt) PURE;
905     STDMETHOD(GetLinkUpdateOptions)(THIS_
906         _In_ DWORD dwLink,
907         _Out_ DWORD *lpdwUpdateOpt) PURE;
908     STDMETHOD(SetLinkSource)(THIS_
909         _In_ DWORD dwLink,
910         _In_ LPWSTR lpszDisplayName,
911         _In_ ULONG lenFileName,
912         _Out_ ULONG *pchEaten,
913         _In_ BOOL fValidateSource) PURE;
914     STDMETHOD(GetLinkSource)(THIS_
915         _In_ DWORD dwLink,
916         _Outptr_opt_result_maybenull_ LPWSTR *lplpszDisplayName,
917         _Out_ ULONG *lplenFileName,
918         _Outptr_opt_result_maybenull_ LPWSTR *lplpszFullLinkType,
919         _Outptr_opt_result_maybenull_ LPWSTR *lplpszShortLinkType,
920         _Out_ BOOL *lpfSourceAvailable,
921         _Out_ BOOL *lpfIsSelected) PURE;
922     STDMETHOD(OpenLinkSource)(THIS_ _In_ DWORD dwLink) PURE;
923     STDMETHOD(UpdateLink)(THIS_
924         _In_ DWORD dwLink,
925         _In_ BOOL fErrorMessage,
926         _In_ BOOL fReserved) PURE;
927     STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
928     /*** IOleUILinkInfoW methods ***/
929     STDMETHOD(GetLastUpdate)(THIS_
930         _In_ DWORD dwLink,
931         _Out_ FILETIME *lpLastUpdate) PURE;
932 };
933 #undef  INTERFACE
934 
935 DECL_WINELIB_TYPE_AW(IOleUILinkInfo)
936 DECL_WINELIB_TYPE_AW(POLEUILINKINFO)
937 DECL_WINELIB_TYPE_AW(LPOLEUILINKINFO)
938 
939 #if !defined(__cplusplus) || defined(CINTERFACE)
940 /*** IUnknown methods ***/
941 #define IOleUILinkInfo_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)
942 #define IOleUILinkInfo_AddRef(p)                      (p)->lpVtbl->AddRef(p)
943 #define IOleUILinkInfo_Release(p)                     (p)->lpVtbl->Release(p)
944 /*** IOleUILinkContainer methods ***/
945 #define IOleUILinkInfo_GetNextLink(p,a)               (p)->lpVtbl->GetNextLink(p,a)
946 #define IOleUILinkInfo_SetLinkUpdateOptions(p,a,b)    (p)->lpVtbl->SetLinkUpdateOptions(p,a,b)
947 #define IOleUILinkInfo_GetLinkUpdateOptions(p,a,b)    (p)->lpVtbl->GetLinkUpdateOptions(p,a,b)
948 #define IOleUILinkInfo_SetLinkSource(p,a,b,c,d,e)     (p)->lpVtbl->SetLinkSource(p,a,b,c,d,e)
949 #define IOleUILinkInfo_GetLinkSource(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetLinkSource(p,a,b,c,d,e,f,g)
950 #define IOleUILinkInfo_OpenLinkSource(p,a)            (p)->lpVtbl->OpenLinkSource(p,a)
951 #define IOleUILinkInfo_UpdateLink(p,a,b,c)            (p)->lpVtbl->UpdateLink(p,a,b,c)
952 #define IOleUILinkInfo_CancelLink(p,a)                (p)->lpVtbl->CancelLink(p,a)
953 /*** IOleUILinkInfo methods ***/
954 #define IOleUILinkInfo_GetLastUpdate(p,a,b)           (p)->lpVtbl->GetLastUpdate(p,a,b)
955 #endif
956 
957 
958 /*****************************************************************************
959  * IOleUIObjInfo interface
960  */
961 #define INTERFACE   IOleUIObjInfoA
962 DECLARE_INTERFACE_(IOleUIObjInfoA,IUnknown)
963 {
964     /*** IUnknown methods ***/
965     STDMETHOD_(HRESULT,QueryInterface)(THIS_
966         _In_ REFIID riid,
967         _Outptr_ void** ppvObject) PURE;
968     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
969     STDMETHOD_(ULONG,Release)(THIS) PURE;
970     /*** IOleUIObjInfoA methods ***/
971     STDMETHOD(GetObjectInfo)(THIS_
972         _In_ DWORD dwObject,
973         _Out_ DWORD *lpdwObjSize,
974         _Outptr_opt_result_maybenull_ LPSTR *lplpszLabel,
975         _Outptr_opt_result_maybenull_ LPSTR *lplpszType,
976         _Outptr_opt_result_maybenull_ LPSTR *lplpszShortType,
977         _Outptr_opt_result_maybenull_ LPSTR *lplpszLocation) PURE;
978     STDMETHOD(GetConvertInfo)(THIS_
979         _In_ DWORD dwObject,
980         _Out_ CLSID *lpClassID,
981         _Out_ WORD *lpwFormat,
982         _Out_ CLSID *lpConvertDefaultClassID,
983         _Outptr_result_maybenull_ LPCLSID *lplpClsidExclude,
984         _Out_opt_ UINT *lpcClsidExclude) PURE;
985     STDMETHOD(ConvertObject)(THIS_
986         _In_ DWORD dwObject,
987         _In_ REFCLSID clsidNew) PURE;
988     STDMETHOD(GetViewInfo)(THIS_
989         _In_ DWORD dwObject,
990         _In_opt_ HGLOBAL *phMetaPict,
991         _In_opt_ DWORD *pdvAspect,
992         _In_opt_ INT *pnCurrentScale) PURE;
993     STDMETHOD(SetViewInfo)(THIS_
994         _In_ DWORD dwObject,
995         _In_ HGLOBAL hMetaPict,
996         _In_ DWORD dvAspect,
997         _In_ INT nCurrentScale,
998         _In_ BOOL bRelativeToOrig) PURE;
999 };
1000 #undef INTERFACE
1001 
1002 #define INTERFACE   IOleUIObjInfoW
1003 DECLARE_INTERFACE_(IOleUIObjInfoW,IUnknown)
1004 {
1005     /*** IUnknown methods ***/
1006     STDMETHOD_(HRESULT,QueryInterface)(THIS_
1007         _In_ REFIID riid,
1008         _Outptr_ void** ppvObject) PURE;
1009     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1010     STDMETHOD_(ULONG,Release)(THIS) PURE;
1011     /*** IOleUIObjInfoW methods ***/
1012     STDMETHOD(GetObjectInfo)(THIS_
1013         _In_ DWORD dwObject,
1014         _Out_ DWORD *lpdwObjSize,
1015         _Outptr_opt_result_maybenull_ LPWSTR *lplpszLabel,
1016         _Outptr_opt_result_maybenull_ LPWSTR *lplpszType,
1017         _Outptr_opt_result_maybenull_ LPWSTR *lplpszShortType,
1018         _Outptr_opt_result_maybenull_ LPWSTR *lplpszLocation) PURE;
1019     STDMETHOD(GetConvertInfo)(THIS_
1020         _In_ DWORD dwObject,
1021         _Out_ CLSID *lpClassID,
1022         _Out_ WORD *lpwFormat,
1023         _Out_ CLSID *lpConvertDefaultClassID,
1024         _Outptr_result_maybenull_ LPCLSID *lplpClsidExclude,
1025         _Out_opt_ UINT *lpcClsidExclude) PURE;
1026     STDMETHOD(ConvertObject)(THIS_
1027         _In_ DWORD dwObject,
1028         _In_ REFCLSID clsidNew) PURE;
1029     STDMETHOD(GetViewInfo)(THIS_
1030         _In_ DWORD dwObject,
1031         _In_opt_ HGLOBAL *phMetaPict,
1032         _In_opt_ DWORD *pdvAspect,
1033         _In_opt_ INT *pnCurrentScale) PURE;
1034     STDMETHOD(SetViewInfo)(THIS_
1035         _In_ DWORD dwObject,
1036         _In_ HGLOBAL hMetaPict,
1037         _In_ DWORD dvAspect,
1038         _In_ INT nCurrentScale,
1039         _In_ BOOL bRelativeToOrig) PURE;
1040 };
1041 #undef INTERFACE
1042 
1043 DECL_WINELIB_TYPE_AW(IOleUIObjInfo)
1044 DECL_WINELIB_TYPE_AW(POLEUIOBJINFO)
1045 DECL_WINELIB_TYPE_AW(LPOLEUIOBJINFO)
1046 
1047 #if !defined(__cplusplus) || defined(CINTERFACE)
1048 /*** IUnknown methods ***/
1049 #define IOleUIObjInfo_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)
1050 #define IOleUIObjInfo_AddRef(p)                        (p)->lpVtbl->AddRef(p)
1051 #define IOleUIObjInfo_Release(p)                       (p)->lpVtbl->Release(p)
1052 /*** IOleUIObjInfo methods ***/
1053 #define IOleUIObjInfo_GetObjectInfo(p,a,b,c,d,e,f)     (p)->lpVtbl->GetObjectInfo(p,a,b,c,d,e,f)
1054 #define IOleUIObjInfo_GetConvertInfo(p,a,b,c,d,e,f)    (p)->lpVtbl->GetConvertInfo(p,a,b,c,d,e,f)
1055 #define IOleUIObjInfo_ConvertObject(p,a,b)             (p)->lpVtbl->ConvertObject(p,a,b)
1056 #define IOleUIObjInfo_GetViewInfo(p,a,b,c,d)           (p)->lpVtbl->GetViewInfo(p,a,b,c,d)
1057 #define IOleUIObjInfo_SetViewInfo(p,a,b,c,d,e)         (p)->lpVtbl->SetViewInfo(p,a,b,c,d,e)
1058 #endif
1059 
1060 UINT WINAPI  OleUIInsertObjectW(_In_ LPOLEUIINSERTOBJECTW);
1061 UINT WINAPI  OleUIInsertObjectA(_In_ LPOLEUIINSERTOBJECTA);
1062 #define      OleUIInsertObject WINELIB_NAME_AW(OleUIInsertObject)
1063 UINT WINAPI  OleUIConvertA(_In_ LPOLEUICONVERTA);
1064 UINT WINAPI  OleUIConvertW(_In_ LPOLEUICONVERTW);
1065 #define      OleUIConvert WINELIB_NAME_AW(OleUIConvert)
1066 UINT WINAPI  OleUIChangeIconA(_In_ LPOLEUICHANGEICONA);
1067 UINT WINAPI  OleUIChangeIconW(_In_ LPOLEUICHANGEICONW);
1068 #define      OleUIChangeIcon WINELIB_NAME_AW(OleUIChangeIcon)
1069 UINT WINAPI  OleUIBusyA(_In_ LPOLEUIBUSYA);
1070 UINT WINAPI  OleUIBusyW(_In_ LPOLEUIBUSYW);
1071 #define      OleUIBusy WINELIB_NAME_AW(OleUIBusy)
1072 UINT WINAPI  OleUIObjectPropertiesA(_In_ LPOLEUIOBJECTPROPSA);
1073 UINT WINAPI  OleUIObjectPropertiesW(_In_ LPOLEUIOBJECTPROPSW);
1074 #define      OleUIObjectProperties WINELIB_NAME_AW(OleUIObjectProperties)
1075 UINT WINAPI  OleUIChangeSourceW(_In_ LPOLEUICHANGESOURCEW);
1076 UINT WINAPI  OleUIChangeSourceA(_In_ LPOLEUICHANGESOURCEA);
1077 #define      OleUIChangeSource WINELIB_NAME_AW(OleUIChangeSource)
1078 UINT WINAPI  OleUIEditLinksA(_In_ LPOLEUIEDITLINKSA lpOleUIEditLinks);
1079 UINT WINAPI  OleUIEditLinksW(_In_ LPOLEUIEDITLINKSW lpOleUIEditLinks);
1080 #define      OleUIEditLinks WINELIB_NAME_AW(OleUIEditLinks)
1081 
1082 BOOL
1083 WINAPI
1084 OleUIUpdateLinksA(
1085   _In_ LPOLEUILINKCONTAINERA lpOleUILinkCntr,
1086   _In_ HWND hwndParent,
1087   _In_ LPSTR lpszTitle,
1088   _In_ INT cLinks);
1089 
1090 BOOL
1091 WINAPI
1092 OleUIUpdateLinksW(
1093   _In_ LPOLEUILINKCONTAINERW lpOleUILinkCntr,
1094   _In_ HWND hwndParent,
1095   _In_ LPWSTR lpszTitle,
1096   _In_ INT cLinks);
1097 
1098 #define OleUIUpdateLinks WINELIB_NAME_AW(OleUIUpdateLinks)
1099 
1100 BOOL
1101 WINAPI
1102 OleUIAddVerbMenuA(
1103   _In_opt_ LPOLEOBJECT lpOleObj,
1104   _In_opt_ LPCSTR lpszShortType,
1105   _In_ HMENU hMenu,
1106   _In_ UINT uPos,
1107   _In_ UINT uIDVerbMin,
1108   _In_ UINT uIDVerbMax,
1109   _In_ BOOL bAddConvert,
1110   _In_ UINT idConvert,
1111   _Out_ HMENU *lphMenu);
1112 
1113 BOOL
1114 WINAPI
1115 OleUIAddVerbMenuW(
1116   _In_opt_ LPOLEOBJECT lpOleObj,
1117   _In_opt_ LPCWSTR lpszShortType,
1118   _In_ HMENU hMenu,
1119   _In_ UINT uPos,
1120   _In_ UINT uIDVerbMin,
1121   _In_ UINT uIDVerbMax,
1122   _In_ BOOL bAddConvert,
1123   _In_ UINT idConvert,
1124   _Out_ HMENU *lphMenu);
1125 
1126 #define OleUIAddVerbMenu WINELIB_NAME_AW(OleUIAddVerbMenu)
1127 
1128 UINT WINAPI  OleUIPasteSpecialA(_In_ LPOLEUIPASTESPECIALA lpOleUIPasteSpecial);
1129 UINT WINAPI  OleUIPasteSpecialW(_In_ LPOLEUIPASTESPECIALW lpOleUIPasteSpecial);
1130 #define      OleUIPasteSpecial WINELIB_NAME_AW(OleUIPasteSpecial)
1131 INT  __cdecl OleUIPromptUserA(INT,HWND, ...);
1132 INT  __cdecl OleUIPromptUserW(INT,HWND, ...);
1133 #define      OleUIPromptUser WINELIB_NAME_AW(OleUIPromptUser)
1134 
1135 #ifdef __cplusplus
1136 } /* Extern "C" */
1137 #endif
1138 
1139 
1140 #endif  /* __WINE_OLEDLG_H */
1141