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