Updated authors list.
[wine] / dlls / shell32 / undocshell.h
1 /*
2  * Copyright 1999, 2000 Juergen Schmied
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  */
18
19 #ifndef __WINE_UNDOCSHELL_H
20 #define __WINE_UNDOCSHELL_H
21
22 #include "windef.h"
23 #include "commctrl.h"
24 #include "shlobj.h"
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif /* defined(__cplusplus) */
29
30 /****************************************************************************
31  *      IDList Functions
32  */
33 LPITEMIDLIST WINAPI ILClone (LPCITEMIDLIST pidl);
34 LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl);
35
36 LPITEMIDLIST WINAPI ILCombine(
37         LPCITEMIDLIST iil1,
38         LPCITEMIDLIST iil2);
39
40 DWORD WINAPI ILGetSize(LPITEMIDLIST pidl);
41
42 LPITEMIDLIST WINAPI ILGetNext(LPITEMIDLIST pidl);
43 LPITEMIDLIST WINAPI ILFindLastID(LPITEMIDLIST pidl);
44 BOOL WINAPI ILRemoveLastID(LPCITEMIDLIST pidl);
45
46 LPITEMIDLIST WINAPI ILFindChild(
47         LPCITEMIDLIST pidl1,
48         LPCITEMIDLIST pidl2);
49
50 LPITEMIDLIST WINAPI ILAppendID(
51         LPITEMIDLIST pidl,
52         LPCSHITEMID lpItemID,
53         BOOL bAddToEnd);
54
55 BOOL WINAPI ILIsEqual(
56         LPCITEMIDLIST pidl1,
57         LPCITEMIDLIST pidl2);
58
59 BOOL WINAPI ILIsParent(
60         LPCITEMIDLIST pidlParent,
61         LPCITEMIDLIST pidlChild,
62         BOOL bImmediate);
63
64 BOOL WINAPI ILGetDisplayName(
65         LPCITEMIDLIST pidl,
66         LPSTR path);
67
68 DWORD WINAPI ILFree(LPITEMIDLIST pidl);
69
70 HRESULT WINAPI ILSaveToStream(
71         LPSTREAM pstrm,
72         LPCITEMIDLIST pidl);
73
74 HRESULT WINAPI ILLoadFromStream(
75         LPSTREAM pstrm,
76         LPITEMIDLIST *ppidl);
77
78 LPITEMIDLIST WINAPI ILGlobalClone(LPCITEMIDLIST pidl);
79 void WINAPI ILGlobalFree(LPCITEMIDLIST pidl);
80
81 LPITEMIDLIST WINAPI SHSimpleIDListFromPathA (LPCSTR lpszPath);
82 LPITEMIDLIST WINAPI SHSimpleIDListFromPathW (LPCWSTR lpszPath);
83 LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW (LPCVOID lpszPath);
84
85 HRESULT WINAPI SHILCreateFromPathA (
86         LPCSTR path,
87         LPITEMIDLIST * ppidl,
88         DWORD *attributes);
89
90 HRESULT WINAPI SHILCreateFromPathW (
91         LPCWSTR path,
92         LPITEMIDLIST * ppidl,
93         DWORD *attributes);
94
95 HRESULT WINAPI SHILCreateFromPathAW (
96         LPCVOID path,
97         LPITEMIDLIST * ppidl,
98         DWORD *attributes);
99
100 LPITEMIDLIST WINAPI ILCreateFromPathA(LPCSTR path);
101 LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR path);
102 LPITEMIDLIST WINAPI ILCreateFromPathAW(LPCVOID path);
103
104 HRESULT WINAPI SHBindToParent(
105         LPCITEMIDLIST pidl,
106         REFIID riid,
107         LPVOID *ppv,
108         LPCITEMIDLIST *ppidlLast);
109
110 /*
111         string functions
112 */
113 HRESULT WINAPI StrRetToStrNA (
114         LPVOID dest,
115         DWORD len,
116         LPSTRRET src,
117         const ITEMIDLIST *pidl);
118
119 HRESULT WINAPI StrRetToStrNW (
120         LPVOID dest,
121         DWORD len,
122         LPSTRRET src,
123         const ITEMIDLIST *pidl);
124
125 HRESULT WINAPI StrRetToStrNAW (
126         LPVOID dest,
127         DWORD len,
128         LPSTRRET src,
129         const ITEMIDLIST *pidl);
130
131
132 /****************************************************************************
133 * SHChangeNotifyRegister API
134 */
135 #define SHCNF_ACCEPT_INTERRUPTS         0x0001
136 #define SHCNF_ACCEPT_NON_INTERRUPTS     0x0002
137 #define SHCNF_NO_PROXY                  0x8001
138
139 typedef struct
140 {
141         LPCITEMIDLIST pidlPath;
142         BOOL bWatchSubtree;
143 } NOTIFYREGISTER, *LPNOTIFYREGISTER;
144
145 typedef const LPNOTIFYREGISTER LPCNOTIFYREGISTER;
146
147 typedef struct
148 {
149         USHORT  cb;
150         DWORD   dwItem1;
151         DWORD   dwItem2;
152 } DWORDITEMID;
153
154 HANDLE WINAPI SHChangeNotifyRegister(
155         HWND hwnd,
156         LONG dwFlags,
157         LONG wEventMask,
158         DWORD uMsg,
159         int cItems,
160         LPCNOTIFYREGISTER lpItems);
161
162 BOOL WINAPI SHChangeNotifyDeregister(HANDLE hNotify);
163
164 HANDLE WINAPI SHChangeNotification_Lock(
165         HANDLE hMemoryMap,
166         DWORD dwProcessId,
167         LPCITEMIDLIST **lppidls,
168         LPLONG lpwEventId);
169
170 BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock);
171
172 /****************************************************************************
173  * Shell Common Dialogs
174  */
175
176 BOOL WINAPI PickIconDlg(
177         HWND hwndOwner,
178         LPSTR lpstrFile,
179         DWORD nMaxFile,
180         LPDWORD lpdwIconIndex);
181
182 /* RunFileDlg flags */
183 #define RFF_NOBROWSE       0x01
184 #define RFF_NODEFAULT      0x02
185 #define RFF_CALCDIRECTORY  0x04
186 #define RFF_NOLABEL        0x08
187 #define RFF_NOSEPARATEMEM  0x20  /* NT only */
188
189 /* RunFileFlg notification structure */
190 typedef struct
191 {
192   NMHDR   hdr;
193   LPCSTR  lpFile;
194   LPCSTR  lpDirectory;
195   int     nShow;
196 } NM_RUNFILEDLG, * LPNM_RUNFILEDLG;
197
198 /* RunFileDlg notification return values */
199 #define RF_OK      0x00
200 #define RF_CANCEL  0x01
201 #define RF_RETRY   0x02
202
203 void WINAPI RunFileDlg(
204         HWND hwndOwner,
205         HICON hIcon,
206         LPCSTR lpstrDirectory,
207         LPCSTR lpstrTitle,
208         LPCSTR lpstrDescription,
209         UINT uFlags);
210
211 void WINAPI ExitWindowsDialog(HWND hwndOwner);
212
213 int  WINAPI RestartDialog(
214         HWND hwndOwner,
215         LPCSTR lpstrReason,
216         UINT uFlags);
217
218 BOOL WINAPI GetFileNameFromBrowse(
219         HWND hwndOwner,
220         LPSTR lpstrFile,
221         DWORD nMaxFile,
222         LPCSTR lpstrInitialDir,
223         LPCSTR lpstrDefExt,
224         LPCSTR lpstrFilter,
225         LPCSTR lpstrTitle);
226
227 BOOL WINAPI SHFindFiles(
228         LPCITEMIDLIST pidlRoot,
229         LPCITEMIDLIST pidlSavedSearch);
230
231 BOOL WINAPI SHFindComputer(
232         LPCITEMIDLIST pidlRoot,
233         LPCITEMIDLIST pidlSavedSearch);
234
235 /* SHObjectProperties flags */
236 #define OPF_PRINTERNAME  0x01
237 #define OPF_PATHNAME     0x02
238
239 BOOL WINAPI SHObjectProperties(
240         HWND hwndOwner,
241         UINT uFlags,
242         LPCSTR lpstrName,
243         LPCSTR lpstrParameters);
244
245 void WINAPI SHHandleDiskFull(HWND hwndOwner,
246         UINT uDrive);
247
248 int  WINAPI SHOutOfMemoryMessageBox(
249         HWND hwndOwner,
250         LPCSTR lpCaption,
251         UINT uType);
252
253 DWORD WINAPI SHNetConnectionDialog(
254         HWND hwndOwner,
255         LPCSTR lpstrRemoteName,
256         DWORD dwType);
257
258 int WINAPIV ShellMessageBoxA(
259         HINSTANCE hInstance,
260         HWND hWnd,
261         LPCSTR lpText,
262         LPCSTR lpCaption,
263         UINT uType,
264         ...);
265
266 int WINAPIV ShellMessageBoxW(
267         HINSTANCE hInstance,
268         HWND hWnd,
269         LPCWSTR lpText,
270         LPCWSTR lpCaption,
271         UINT uType,
272         ...);
273
274 #define ShellMessageBox WINELIB_NAME_AW(ShellMessageBox)
275
276 /****************************************************************************
277  * Memory Routines
278  */
279
280 LPVOID WINAPI SHAlloc(ULONG cb);
281 void WINAPI SHFree(LPVOID pv);
282
283 HANDLE WINAPI SHAllocShared(
284         LPVOID pv,
285         ULONG cb,
286         DWORD pid);
287
288 BOOL WINAPI SHFreeShared(
289         HANDLE hMem,
290         DWORD pid);
291
292 LPVOID WINAPI SHLockShared(
293         HANDLE hMem,
294         DWORD pid);
295
296 BOOL WINAPI SHUnlockShared(LPVOID pv);
297
298 /****************************************************************************
299  * Cabinet Window Messages
300  */
301
302 #define CWM_SETPATH           (WM_USER + 2)
303 #define CWM_WANTIDLE          (WM_USER + 3)
304 #define CWM_GETSETCURRENTINFO (WM_USER + 4)
305 #define CWM_SELECTITEM        (WM_USER + 5)
306 #define CWM_SELECTITEMSTR     (WM_USER + 6)
307 #define CWM_GETISHELLBROWSER  (WM_USER + 7)
308 #define CWM_TESTPATH          (WM_USER + 9)
309 #define CWM_STATECHANGE       (WM_USER + 10)
310 #define CWM_GETPATH           (WM_USER + 12)
311
312 /* CWM_TESTPATH types */
313 #define CWTP_ISEQUAL  0
314 #define CWTP_ISCHILD  1
315
316 /* CWM_TESTPATH structure */
317 typedef struct
318 {
319         DWORD dwType;
320         ITEMIDLIST idl;
321 } CWTESTPATHSTRUCT,* LPCWTESTPATHSTRUCT;
322
323 /****************************************************************************
324  * System Imagelist Routines
325  */
326
327 int WINAPI Shell_GetCachedImageIndex(
328         LPCSTR lpszFileName,
329         UINT nIconIndex,
330         BOOL bSimulateDoc);
331
332 BOOL WINAPI Shell_GetImageLists(
333         HIMAGELIST *lphimlLarge,
334         HIMAGELIST *lphimlSmall);
335
336 HICON WINAPI SHGetFileIcon(
337         DWORD dwReserved,
338         LPCSTR lpszPath,
339         DWORD dwFileAttributes,
340         UINT uFlags);
341
342 int WINAPI SHMapPIDLToSystemImageListIndex(
343         LPSHELLFOLDER psf,
344         LPCITEMIDLIST pidl,
345         UINT * pOpenIndex);
346
347 BOOL WINAPI FileIconInit(BOOL bFullInit);
348
349 /****************************************************************************
350  * File Menu Routines
351  */
352 /* FileMenu_Create nSelHeight constants */
353 #define FM_DEFAULT_SELHEIGHT  -1
354 #define FM_FULL_SELHEIGHT     0
355
356 /* FileMenu_Create flags */
357 #define FMF_SMALL_ICONS      0x00
358 #define FMF_LARGE_ICONS      0x08
359 #define FMF_NO_COLUMN_BREAK  0x10
360
361 HMENU WINAPI FileMenu_Create(
362         COLORREF crBorderColor,
363         int nBorderWidth,
364         HBITMAP hBorderBmp,
365         int nSelHeight,
366         UINT uFlags);
367
368 void WINAPI FileMenu_Destroy(HMENU hMenu);
369
370 /* FileMenu_AppendItem constants */
371 #define FM_SEPARATOR       (LPCSTR)1
372 #define FM_BLANK_ICON      -1
373 #define FM_DEFAULT_HEIGHT  0
374
375 BOOL WINAPI FileMenu_AppendItem(
376         HMENU hMenu,
377         LPCSTR lpszText,
378         UINT uID,
379         int iIcon,
380         HMENU hMenuPopup,
381         int nItemHeight);
382
383 /* FileMenu_InsertUsingPidl flags */
384 #define FMF_NO_EMPTY_ITEM      0x01
385 #define FMF_NO_PROGRAM_GROUPS  0x04
386
387 /* FileMenu_InsertUsingPidl callback function */
388 typedef void (CALLBACK *LPFNFMCALLBACK)(LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlFile);
389
390 int WINAPI FileMenu_InsertUsingPidl(
391         HMENU hMenu,
392         UINT uID,
393         LPCITEMIDLIST pidl,
394         UINT uFlags,
395         UINT uEnumFlags,
396         LPFNFMCALLBACK lpfnCallback);
397
398 int WINAPI FileMenu_ReplaceUsingPidl(
399         HMENU hMenu,
400         UINT uID,
401         LPCITEMIDLIST pidl,
402         UINT uEnumFlags,
403         LPFNFMCALLBACK lpfnCallback);
404
405 void WINAPI FileMenu_Invalidate(HMENU hMenu);
406
407 HMENU WINAPI FileMenu_FindSubMenuByPidl(
408         HMENU hMenu,
409         LPCITEMIDLIST pidl);
410
411 BOOL WINAPI FileMenu_TrackPopupMenuEx(
412         HMENU hMenu,
413         UINT uFlags,
414         int x,
415         int y,
416         HWND hWnd,
417         LPTPMPARAMS lptpm);
418
419 BOOL WINAPI FileMenu_GetLastSelectedItemPidls(
420         UINT uReserved,
421         LPITEMIDLIST *ppidlFolder,
422         LPITEMIDLIST *ppidlItem);
423
424 LRESULT WINAPI FileMenu_MeasureItem(
425         HWND hWnd,
426         LPMEASUREITEMSTRUCT lpmis);
427
428 LRESULT WINAPI FileMenu_DrawItem(
429         HWND hWnd,
430         LPDRAWITEMSTRUCT lpdis);
431
432 BOOL WINAPI FileMenu_InitMenuPopup(HMENU hMenu);
433
434 void WINAPI FileMenu_AbortInitMenu(void);
435
436 LRESULT WINAPI FileMenu_HandleMenuChar(
437         HMENU hMenu,
438         WPARAM wParam);
439
440 BOOL WINAPI FileMenu_DeleteAllItems(HMENU hMenu);
441
442 BOOL WINAPI FileMenu_DeleteItemByCmd(
443         HMENU hMenu,
444         UINT uID);
445
446 BOOL WINAPI FileMenu_DeleteItemByIndex(
447         HMENU hMenu,
448         UINT uPos);
449
450 BOOL WINAPI FileMenu_DeleteMenuItemByFirstID(
451         HMENU hMenu,
452         UINT uID);
453
454 BOOL WINAPI FileMenu_DeleteSeparator(HMENU hMenu);
455
456 BOOL WINAPI FileMenu_EnableItemByCmd(
457         HMENU hMenu,
458         UINT uID,
459         BOOL bEnable);
460
461 DWORD WINAPI FileMenu_GetItemExtent(
462         HMENU hMenu,
463         UINT uPos);
464
465 int WINAPI FileMenu_AppendFilesForPidl(
466         HMENU hMenu,
467         LPCITEMIDLIST pidl,
468         BOOL bAddSeparator);
469
470 int WINAPI FileMenu_AddFilesForPidl(
471         HMENU hMenu,
472         UINT uReserved,
473         UINT uID,
474         LPCITEMIDLIST pidl,
475         UINT uFlags,
476         UINT uEnumFlags,
477         LPFNFMCALLBACK lpfnCallback);
478
479 /****************************************************************************
480  * Drag And Drop Routines
481  */
482 HRESULT WINAPI SHLoadOLE(DWORD dwFlags);
483
484 HRESULT WINAPI SHRegisterDragDrop(
485         HWND hWnd,
486         LPDROPTARGET lpDropTarget);
487
488 HRESULT WINAPI SHRevokeDragDrop(HWND hWnd);
489
490 HRESULT WINAPI SHDoDragDrop(
491         HWND hWnd,
492         LPDATAOBJECT lpDataObject,
493         LPDROPSOURCE lpDropSource,
494         DWORD dwOKEffect,
495         LPDWORD pdwEffect);
496
497 BOOL WINAPI DAD_DragEnter(HWND hWnd);
498
499 BOOL WINAPI DAD_DragEnterEx(
500         HWND hWnd,
501         POINT pt);
502
503 BOOL WINAPI DAD_DragMove(POINT pt);
504
505 /* DAD_AutoScroll return values */
506 #define DAD_SCROLL_UP    1
507 #define DAD_SCROLL_DOWN  2
508 #define DAD_SCROLL_LEFT  4
509 #define DAD_SCROLL_RIGHT 8
510
511 /* DAD_AutoScroll sample structure */
512 typedef struct
513 {
514         DWORD  dwCount;
515         DWORD  dwLastTime;
516         BOOL   bWrapped;
517         POINT  aptPositions[3];
518         DWORD  adwTimes[3];
519 } SCROLLSAMPLES, *LPSCROLLSAMPLES;
520
521 DWORD WINAPI DAD_AutoScroll(HWND hWnd,
522         LPSCROLLSAMPLES lpSamples,
523         LPPOINT lppt);
524
525 BOOL WINAPI DAD_DragLeave();
526
527 BOOL WINAPI DAD_SetDragImageFromListView(
528         HWND hWnd,
529         POINT pt);
530
531 BOOL WINAPI DAD_SetDragImage(
532         HIMAGELIST himlTrack,
533         LPPOINT lppt);
534
535 BOOL WINAPI DAD_ShowDragImage(BOOL bShow);
536
537 HRESULT WINAPI SHCreateStdEnumFmtEtc(
538         DWORD cFormats,
539         const FORMATETC *lpFormats,
540         LPENUMFORMATETC *ppenumFormatetc);
541
542 HRESULT WINAPI CIDLData_CreateFromIDArray(
543         LPCITEMIDLIST pidlFolder,
544         DWORD cpidlFiles,
545         LPCITEMIDLIST *lppidlFiles,
546         LPDATAOBJECT *ppdataObject);
547
548 /****************************************************************************
549  * Path Manipulation Routines
550  */
551
552 BOOL WINAPI PathAppendAW(LPVOID lpszPath1, LPCVOID lpszPath2);
553
554 LPVOID WINAPI PathCombineAW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile);
555
556 LPVOID  WINAPI PathAddBackslashAW(LPVOID path);
557
558 LPVOID WINAPI PathBuildRootAW(LPVOID lpszPath, int drive);
559
560 LPVOID WINAPI PathFindExtensionAW(LPCVOID path);
561
562 LPVOID WINAPI PathFindFileNameAW(LPCVOID path);
563
564 LPVOID WINAPI PathGetExtensionAW(LPCVOID lpszPath,  DWORD void1, DWORD void2);
565
566 LPVOID WINAPI PathGetArgsAW(LPVOID lpszPath);
567
568 BOOL WINAPI PathRemoveFileSpecAW(LPVOID lpszPath);
569
570 LPVOID WINAPI PathGetShortPathAW(LPVOID lpszPath);
571
572 void WINAPI PathRemoveBlanksAW(LPVOID lpszPath);
573
574 VOID  WINAPI PathQuoteSpacesAW(LPVOID path);
575
576 void WINAPI PathUnquoteSpacesAW(LPVOID lpszPath);
577
578 BOOL WINAPI PathIsUNCAW(LPCVOID lpszPath);
579
580 BOOL WINAPI PathIsRelativeAW(LPCVOID lpszPath);
581
582 BOOL WINAPI PathIsRootAW(LPCVOID x);
583
584 BOOL WINAPI PathIsExeAW(LPCVOID lpszPath);
585
586 BOOL WINAPI PathIsDirectoryAW(LPCVOID lpszPath);
587
588 BOOL WINAPI PathFileExistsAW(LPCVOID lpszPath);
589
590 BOOL WINAPI PathMatchSpecAW(LPVOID lpszPath, LPVOID lpszSpec);
591
592 BOOL WINAPI PathMakeUniqueNameAW(
593         LPVOID lpszBuffer,
594         DWORD dwBuffSize,
595         LPCVOID lpszShortName,
596         LPCVOID lpszLongName,
597         LPCVOID lpszPathName);
598
599 BOOL WINAPI PathYetAnotherMakeUniqueNameA(
600         LPSTR lpszBuffer,
601         LPCSTR lpszPathName,
602         LPCSTR lpszShortName,
603         LPCSTR lpszLongName);
604
605 /* PathCleanupSpec return values */
606 #define PCS_REPLACEDCHARS  0x00000001
607 #define PCS_REMOVEDCHARS   0x00000002
608 #define PCS_SHORTENED      0x00000004
609 #define PCS_PATHTOOLONG    0x80000008
610
611 DWORD WINAPI PathCleanupSpecAW(LPCVOID lpszPath, LPVOID lpszFile);
612
613 BOOL WINAPI PathQualifyA(LPCSTR path);
614 BOOL WINAPI PathQualifyW(LPCWSTR path);
615 #define PathQualify WINELIB_NAME_AW(PathQualify)
616 BOOL  WINAPI PathQualifyAW(LPCVOID path);
617
618
619 /* PathResolve flags */
620 #define PRF_CHECKEXISTANCE  0x01
621 #define PRF_EXECUTABLE      0x02
622 #define PRF_QUALIFYONPATH   0x04
623 #define PRF_WINDOWS31       0x08
624
625 BOOL WINAPI PathResolveAW(LPVOID lpszPath, LPCVOID *alpszPaths, DWORD dwFlags);
626
627 VOID WINAPI PathSetDlgItemPathAW(HWND hDlg, int nIDDlgItem, LPCVOID lpszPath);
628
629 /* PathProcessCommand flags */
630 #define PPCF_QUOTEPATH        0x01 /* implies PPCF_INCLUDEARGS */
631 #define PPCF_INCLUDEARGS      0x02
632 #define PPCF_NODIRECTORIES    0x10
633 #define PPCF_DONTRESOLVE      0x20
634 #define PPCF_PATHISRELATIVE   0x40
635
636 HRESULT WINAPI PathProcessCommandAW(LPCVOID lpszPath, LPVOID lpszBuff,
637                                 DWORD dwBuffSize, DWORD dwFlags);
638
639 void WINAPI PathStripPathAW(LPVOID lpszPath);
640
641 BOOL WINAPI PathStripToRootAW(LPVOID lpszPath);
642
643 void WINAPI PathRemoveArgsAW(LPVOID lpszPath);
644
645 void WINAPI PathRemoveExtensionAW(LPVOID lpszPath);
646
647 int WINAPI PathParseIconLocationAW(LPVOID lpszPath);
648
649 BOOL WINAPI PathIsSameRootAW(LPCVOID lpszPath1, LPCVOID lpszPath2);
650
651 BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID sOtherDirs);
652
653 /****************************************************************************
654  * Shell Namespace Routines
655  */
656
657 /* SHCreateShellFolderViewEx callback function */
658 typedef HRESULT (CALLBACK *LPFNSFVCALLBACK)(
659         DWORD dwUser,
660         LPSHELLFOLDER pshf,
661         HWND hWnd,
662         UINT uMsg,
663         WPARAM wParam,
664         LPARAM lParam);
665
666 /* SHCreateShellFolderViewEx structure */
667 typedef struct
668 {
669   DWORD            dwSize;
670   LPSHELLFOLDER    pshf;
671   DWORD            dwUser;
672   LPCITEMIDLIST    pidlFolder;
673   DWORD            dwEventId;
674   LPFNSFVCALLBACK  lpfnCallback;
675   UINT             uViewMode;
676 } SHELLFOLDERVIEWINFO, * LPSHELLFOLDERVIEWINFO;
677 typedef const SHELLFOLDERVIEWINFO * LPCSHELLFOLDERVIEWINFO;
678
679 HRESULT WINAPI SHCreateShellFolderViewEx(
680         LPCSHELLFOLDERVIEWINFO pshfvi,
681         LPSHELLVIEW *ppshv);
682
683 /* SHCreateShellFolderViewEx callback messages */
684 #define SFVCB_ADDTOMENU           0x0001
685 #define SFVCB_INVOKECOMMAND       0x0002
686 #define SFVCB_GETMENUHELP         0x0003
687 #define SFVCB_GETTOOLBARTIP       0x0004
688 #define SFVCB_GETTOOLBARINFO      0x0005
689 #define SFVCB_ADDTOOLBARITEMS     0x0006
690 #define SFVCB_INITMENUPOPUP       0x0007
691 #define SFVCB_SELECTIONCHANGED    0x0008
692 #define SFVCB_DRAWMENUITEM        0x0009
693 #define SFVCB_MEASUREMENUITEM     0x000A
694 #define SFVCB_EXITMENULOOP        0x000B
695 #define SFVCB_VIEWRELEASE         0x000C
696 #define SFVCB_GETNAMELENGTH       0x000D
697 #define SFVCB_CHANGENOTIFY        0x000E
698 #define SFVCB_WINDOWCREATED       0x000F
699 #define SFVCB_WINDOWCLOSING       0x0010
700 #define SFVCB_LISTREFRESHED       0x0011
701 #define SFVCB_WINDOWFOCUSED       0x0012
702 #define SFVCB_REGISTERCOPYHOOK    0x0014
703 #define SFVCB_COPYHOOKCALLBACK    0x0015
704 #define SFVCB_GETDETAILSOF        0x0017
705 #define SFVCB_COLUMNCLICK         0x0018
706 #define SFVCB_GETCHANGENOTIFYPIDL 0x0019
707 #define SFVCB_GETESTIMATEDCOUNT   0x001A
708 #define SFVCB_ADJUSTVIEWMODE      0x001B
709 #define SFVCB_REMOVEFROMMENU      0x001C
710 #define SFVCB_ADDINGOBJECT        0x001D
711 #define SFVCB_REMOVINGOBJECT      0x001E
712 #define SFVCB_UPDATESTATUSBAR     0x001F
713 #define SFVCB_ISSLOWREFRESH       0x0020
714 #define SFVCB_GETCOMMANDDIR       0x0021
715 #define SFVCB_GETCOLUMNSTREAM     0x0022
716 #define SFVCB_CANSELECTALL        0x0023
717 #define SFVCB_DRAGSUCCEEDED       0x0024
718 #define SFVCB_ISSTRICTREFRESH     0x0025
719 #define SFVCB_ISCHILDOBJECT       0x0026
720
721 /* Generic structure used by several messages */
722 typedef struct
723 {
724   DWORD          dwReserved;
725   DWORD          dwReserved2;
726   LPCITEMIDLIST  pidl;
727   LPDWORD        lpdwUser;
728 } SFVCBINFO, * LPSFVCBINFO;
729 typedef const SFVCBINFO * LPCSFVCBINFO;
730
731 /* SFVCB_ADDTOMENU structure */
732 typedef struct
733 {
734   HMENU  hMenu;
735   UINT   indexMenu;
736   UINT   idCmdFirst;
737   UINT   idCmdLast;
738 } SFVMENUINFO, * LPSFVMENUINFO;
739
740 /* SFVCB_GETTOOLBARINFO structure */
741 typedef struct
742 {
743   UINT  nButtons;
744   UINT  uFlags;
745 } SFVTOOLBARINFO, * LPSFVTOOLBARINFO;
746
747 /* SFVTOOLBARINFO flags */
748 typedef enum
749 {
750   SFVTI_ADDTOEND   = 0,
751   SFVTI_ADDTOFRONT = 1,
752   SFVTI_OVERWRITE  = 2
753 } SFVTIF;
754
755 /* SFVCB_SELECTIONCHANGED structure */
756 typedef struct
757 {
758   UINT           uOldState;
759   UINT           uNewState;
760   LPCITEMIDLIST  pidl;
761   LPDWORD        lpdwUser;
762 } SFVSELECTSTATE, * LPSFVSELECTSTATE;
763 typedef const SFVSELECTSTATE * LPCSFVSELECTSTATE;
764
765 /* SFVCB_COPYHOOKCALLBACK structure */
766 typedef struct
767 {
768   HWND    hwnd;
769   UINT    wFunc;
770   UINT    wFlags;
771   LPCSTR  pszSrcFile;
772   DWORD   dwSrcAttribs;
773   LPCSTR  pszDestFile;
774   DWORD   dwDestAttribs;
775 } SFVCOPYHOOKINFO, * LPSFVCOPYHOOKINFO;
776 typedef const SFVCOPYHOOKINFO * LPCSFVCOPYHOOKINFO;
777
778 /* SFVCB_GETDETAILSOF structure */
779 typedef struct
780 {
781   LPCITEMIDLIST  pidl;
782   int            fmt;
783   int            cx;
784   STRRET         lpText;
785 } SFVCOLUMNINFO, * LPSFVCOLUMNINFO;
786
787 int WINAPI SHShellFolderView_Message(
788         HWND hwndCabinet,
789         DWORD dwMessage,
790         DWORD dwParam);
791
792 /* SHShellFolderView_Message messages */
793 #define SFVM_REARRANGE          0x0001
794 #define SFVM_GETARRANGECOLUMN   0x0002
795 #define SFVM_ADDOBJECT          0x0003
796 #define SFVM_GETITEMCOUNT       0x0004
797 #define SFVM_GETITEMPIDL        0x0005
798 #define SFVM_REMOVEOBJECT       0x0006
799 #define SFVM_UPDATEOBJECT       0x0007
800 #define SFVM_SETREDRAW          0x0008
801 #define SFVM_GETSELECTEDOBJECTS 0x0009
802 #define SFVM_ISDROPONSOURCE     0x000A
803 #define SFVM_MOVEICONS          0x000B
804 #define SFVM_GETDRAGPOINT       0x000C
805 #define SFVM_GETDROPPOINT       0x000D
806 #define SFVM_SETOBJECTPOS       0x000E
807 #define SFVM_ISDROPONBACKGROUND 0x000F
808 #define SFVM_CUTOBJECTS         0x0010
809 #define SFVM_TOGGLEAUTOARRANGE  0x0011
810 #define SFVM_LINEUPICONS        0x0012
811 #define SFVM_GETAUTOARRANGE     0x0013
812 #define SFVM_GETSELECTEDCOUNT   0x0014
813 #define SFVM_GETITEMSPACING     0x0015
814 #define SFVM_REFRESHOBJECT      0x0016
815 #define SFVM_SETCLIPBOARDPOINTS 0x0017
816
817 /****************************************************************************
818  * Misc Stuff
819  */
820
821 /* SHWaitForFileToOpen flags */
822 #define SHWFF_ADD     0x01
823 #define SHWFF_REMOVE  0x02
824 #define SHWFF_WAIT    0x04
825
826 BOOL WINAPI SHWaitForFileToOpen(
827         LPCITEMIDLIST pidl,
828         DWORD dwFlags,
829         DWORD dwTimeout);
830
831 WORD WINAPI ArrangeWindows(
832         HWND hwndParent,
833         DWORD dwReserved,
834         LPCRECT lpRect,
835         WORD cKids,
836         CONST HWND * lpKids);
837
838 /* RegisterShellHook types */
839 #define RSH_DEREGISTER        0
840 #define RSH_REGISTER          1
841 #define RSH_REGISTER_PROGMAN  2
842 #define RSH_REGISTER_TASKMAN  3
843
844 BOOL WINAPI RegisterShellHook(
845         HWND hWnd,
846         DWORD dwType);
847
848 /* SHCreateDefClassObject callback function */
849 typedef HRESULT (CALLBACK *LPFNCDCOCALLBACK)(
850         LPUNKNOWN pUnkOuter,
851         REFIID riidObject,
852         LPVOID *ppvObject);
853
854 HRESULT WINAPI SHCreateDefClassObject(
855         REFIID riidFactory,
856         LPVOID *ppvFactory,
857         LPFNCDCOCALLBACK lpfnCallback,
858         LPDWORD lpdwUsage,
859         REFIID riidObject);
860
861 DWORD WINAPI SHCLSIDFromStringA (LPCSTR clsid, CLSID *id);
862 DWORD WINAPI SHCLSIDFromStringW (LPWSTR clsid, CLSID *id);
863
864 HRESULT WINAPI SHCoCreateInstance(
865         LPCSTR lpszClsid,
866         REFCLSID rClsid,
867         LPUNKNOWN pUnkOuter,
868         REFIID riid,
869         LPVOID *ppv);
870
871 void WINAPI SHFreeUnusedLibraries();
872
873 /* SHCreateLinks flags */
874 #define SHCLF_PREFIXNAME       0x01
875 #define SHCLF_CREATEONDESKTOP  0x02
876
877 HRESULT WINAPI SHCreateLinks(
878         HWND hWnd,
879         LPCSTR lpszDir,
880         LPDATAOBJECT lpDataObject,
881         UINT uFlags,
882         LPITEMIDLIST *lppidlLinks);
883
884 /* SHGetNewLinkInfo flags */
885 #define SHGNLI_PIDL        0x01
886 #define SHGNLI_PREFIXNAME  0x02
887 #define SHGNLI_NOUNIQUE    0x04
888
889 BOOL WINAPI SHGetNewLinkInfoA(
890         LPCSTR pszLinkTo,
891         LPCSTR pszDir,
892         LPSTR pszName,
893         BOOL *pfMustCopy,
894         UINT uFlags);
895
896 BOOL WINAPI SHGetNewLinkInfoW(
897         LPCWSTR pszLinkTo,
898         LPCWSTR pszDir,
899         LPWSTR pszName,
900         BOOL *pfMustCopy,
901         UINT uFlags);
902 #define SHGetNewLinkInfo WINELIB_NAME_AW(SHGetNewLinkInfo)
903
904 /* policy functions */
905 BOOL WINAPI SHInitRestricted(LPSTR, LPSTR);
906
907 #ifdef __cplusplus
908 } /* extern "C" */
909 #endif /* defined(__cplusplus) */
910
911 #endif /* __WINE_UNDOCSHELL_H */