Use MapLS/UnMapLS instead of SEGPTR_* macros.
[wine] / dlls / shell32 / 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,  DWORD void1, DWORD void2); 
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 /* PathCleanupSpec return values */
588 #define PCS_REPLACEDCHARS  0x00000001
589 #define PCS_REMOVEDCHARS   0x00000002
590 #define PCS_SHORTENED      0x00000004
591 #define PCS_PATHTOOLONG    0x80000008
592
593 DWORD WINAPI PathCleanupSpecAW(LPCVOID lpszPath, LPVOID lpszFile);
594
595 BOOL WINAPI PathQualifyA(LPCSTR path);  
596 BOOL WINAPI PathQualifyW(LPCWSTR path); 
597 #define PathQualify WINELIB_NAME_AW(PathQualify)
598 BOOL  WINAPI PathQualifyAW(LPCVOID path);       
599
600
601 /* PathResolve flags */
602 #define PRF_CHECKEXISTANCE  0x01
603 #define PRF_EXECUTABLE      0x02
604 #define PRF_QUALIFYONPATH   0x04
605 #define PRF_WINDOWS31       0x08
606
607 BOOL WINAPI PathResolveAW(LPVOID lpszPath, LPCVOID *alpszPaths, DWORD dwFlags);
608
609 BOOL WINAPI PathSetDlgItemPathAW(HWND hDlg, int nIDDlgItem, LPCVOID lpszPath);
610
611 /* PathProcessCommand flags */
612 #define PPCF_QUOTEPATH        0x01 /* implies PPCF_INCLUDEARGS */
613 #define PPCF_INCLUDEARGS      0x02
614 #define PPCF_NODIRECTORIES    0x10
615 #define PPCF_DONTRESOLVE      0x20
616 #define PPCF_PATHISRELATIVE   0x40
617
618 HRESULT WINAPI PathProcessCommandAW(LPCVOID lpszPath, LPVOID lpszBuff,
619                                 DWORD dwBuffSize, DWORD dwFlags);
620
621 void WINAPI PathStripPathAW(LPVOID lpszPath);
622
623 BOOL WINAPI PathStripToRootAW(LPVOID lpszPath);
624
625 void WINAPI PathRemoveArgsAW(LPVOID lpszPath);
626
627 void WINAPI PathRemoveExtensionAW(LPVOID lpszPath);
628
629 int WINAPI PathParseIconLocationAW(LPVOID lpszPath);
630
631 BOOL WINAPI PathIsSameRootAW(LPCVOID lpszPath1, LPCVOID lpszPath2);
632
633 BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID sOtherDirs);
634
635 /****************************************************************************
636  * Shell Namespace Routines
637  */
638
639 /* SHCreateShellFolderViewEx callback function */
640 typedef HRESULT CALLBACK (*LPFNSFVCALLBACK)(
641         DWORD dwUser,
642         LPSHELLFOLDER pshf,
643         HWND hWnd,
644         UINT uMsg,
645         WPARAM wParam,
646         LPARAM lParam);
647
648 /* SHCreateShellFolderViewEx structure */
649 typedef struct 
650 {
651   DWORD            dwSize;
652   LPSHELLFOLDER    pshf;
653   DWORD            dwUser;
654   LPCITEMIDLIST    pidlFolder;
655   DWORD            dwEventId;
656   LPFNSFVCALLBACK  lpfnCallback;
657   UINT             uViewMode;
658 } SHELLFOLDERVIEWINFO, * LPSHELLFOLDERVIEWINFO;
659 typedef const SHELLFOLDERVIEWINFO * LPCSHELLFOLDERVIEWINFO;
660
661 HRESULT WINAPI SHCreateShellFolderViewEx(
662         LPCSHELLFOLDERVIEWINFO pshfvi,
663         LPSHELLVIEW *ppshv);
664
665 /* SHCreateShellFolderViewEx callback messages */
666 #define SFVCB_ADDTOMENU           0x0001
667 #define SFVCB_INVOKECOMMAND       0x0002
668 #define SFVCB_GETMENUHELP         0x0003
669 #define SFVCB_GETTOOLBARTIP       0x0004
670 #define SFVCB_GETTOOLBARINFO      0x0005
671 #define SFVCB_ADDTOOLBARITEMS     0x0006
672 #define SFVCB_INITMENUPOPUP       0x0007
673 #define SFVCB_SELECTIONCHANGED    0x0008
674 #define SFVCB_DRAWMENUITEM        0x0009
675 #define SFVCB_MEASUREMENUITEM     0x000A
676 #define SFVCB_EXITMENULOOP        0x000B
677 #define SFVCB_VIEWRELEASE         0x000C
678 #define SFVCB_GETNAMELENGTH       0x000D
679 #define SFVCB_CHANGENOTIFY        0x000E
680 #define SFVCB_WINDOWCREATED       0x000F
681 #define SFVCB_WINDOWCLOSING       0x0010
682 #define SFVCB_LISTREFRESHED       0x0011
683 #define SFVCB_WINDOWFOCUSED       0x0012
684 #define SFVCB_REGISTERCOPYHOOK    0x0014
685 #define SFVCB_COPYHOOKCALLBACK    0x0015
686 #define SFVCB_GETDETAILSOF        0x0017
687 #define SFVCB_COLUMNCLICK         0x0018
688 #define SFVCB_GETCHANGENOTIFYPIDL 0x0019
689 #define SFVCB_GETESTIMATEDCOUNT   0x001A
690 #define SFVCB_ADJUSTVIEWMODE      0x001B
691 #define SFVCB_REMOVEFROMMENU      0x001C
692 #define SFVCB_ADDINGOBJECT        0x001D
693 #define SFVCB_REMOVINGOBJECT      0x001E
694 #define SFVCB_UPDATESTATUSBAR     0x001F
695 #define SFVCB_ISSLOWREFRESH       0x0020
696 #define SFVCB_GETCOMMANDDIR       0x0021
697 #define SFVCB_GETCOLUMNSTREAM     0x0022
698 #define SFVCB_CANSELECTALL        0x0023
699 #define SFVCB_DRAGSUCCEEDED       0x0024
700 #define SFVCB_ISSTRICTREFRESH     0x0025
701 #define SFVCB_ISCHILDOBJECT       0x0026
702
703 /* Generic structure used by several messages */
704 typedef struct 
705 {
706   DWORD          dwReserved;
707   DWORD          dwReserved2;
708   LPCITEMIDLIST  pidl;
709   LPDWORD        lpdwUser;
710 } SFVCBINFO, * LPSFVCBINFO;
711 typedef const SFVCBINFO * LPCSFVCBINFO;
712
713 /* SFVCB_ADDTOMENU structure */
714 typedef struct  
715 {
716   HMENU  hMenu;
717   UINT   indexMenu;
718   UINT   idCmdFirst;
719   UINT   idCmdLast;
720 } SFVMENUINFO, * LPSFVMENUINFO;
721
722 /* SFVCB_GETTOOLBARINFO structure */
723 typedef struct 
724 {
725   UINT  nButtons;
726   UINT  uFlags;
727 } SFVTOOLBARINFO, * LPSFVTOOLBARINFO;
728
729 /* SFVTOOLBARINFO flags */
730 typedef enum 
731 {
732   SFVTI_ADDTOEND   = 0,
733   SFVTI_ADDTOFRONT = 1,
734   SFVTI_OVERWRITE  = 2
735 } SFVTIF; 
736
737 /* SFVCB_SELECTIONCHANGED structure */
738 typedef struct 
739 {
740   UINT           uOldState;
741   UINT           uNewState;
742   LPCITEMIDLIST  pidl;
743   LPDWORD        lpdwUser;
744 } SFVSELECTSTATE, * LPSFVSELECTSTATE;
745 typedef const SFVSELECTSTATE * LPCSFVSELECTSTATE;
746
747 /* SFVCB_COPYHOOKCALLBACK structure */
748 typedef struct 
749 {
750   HWND    hwnd;
751   UINT    wFunc;
752   UINT    wFlags;
753   LPCSTR  pszSrcFile;
754   DWORD   dwSrcAttribs;
755   LPCSTR  pszDestFile;
756   DWORD   dwDestAttribs;
757 } SFVCOPYHOOKINFO, * LPSFVCOPYHOOKINFO;
758 typedef const SFVCOPYHOOKINFO * LPCSFVCOPYHOOKINFO;
759
760 /* SFVCB_GETDETAILSOF structure */
761 typedef struct 
762 {
763   LPCITEMIDLIST  pidl;
764   int            fmt;
765   int            cx;
766   STRRET         lpText;
767 } SFVCOLUMNINFO, * LPSFVCOLUMNINFO;
768
769 int WINAPI SHShellFolderView_Message(
770         HWND hwndCabinet, 
771         DWORD dwMessage,
772         DWORD dwParam); 
773
774 /* SHShellFolderView_Message messages */
775 #define SFVM_REARRANGE          0x0001
776 #define SFVM_GETARRANGECOLUMN   0x0002
777 #define SFVM_ADDOBJECT          0x0003
778 #define SFVM_GETITEMCOUNT       0x0004
779 #define SFVM_GETITEMPIDL        0x0005
780 #define SFVM_REMOVEOBJECT       0x0006
781 #define SFVM_UPDATEOBJECT       0x0007
782 #define SFVM_SETREDRAW          0x0008
783 #define SFVM_GETSELECTEDOBJECTS 0x0009
784 #define SFVM_ISDROPONSOURCE     0x000A
785 #define SFVM_MOVEICONS          0x000B
786 #define SFVM_GETDRAGPOINT       0x000C
787 #define SFVM_GETDROPPOINT       0x000D
788 #define SFVM_SETOBJECTPOS       0x000E
789 #define SFVM_ISDROPONBACKGROUND 0x000F
790 #define SFVM_CUTOBJECTS         0x0010
791 #define SFVM_TOGGLEAUTOARRANGE  0x0011
792 #define SFVM_LINEUPICONS        0x0012
793 #define SFVM_GETAUTOARRANGE     0x0013
794 #define SFVM_GETSELECTEDCOUNT   0x0014
795 #define SFVM_GETITEMSPACING     0x0015
796 #define SFVM_REFRESHOBJECT      0x0016
797 #define SFVM_SETCLIPBOARDPOINTS 0x0017
798
799 /****************************************************************************
800  * Misc Stuff
801  */
802
803 /* SHWaitForFileToOpen flags */
804 #define SHWFF_ADD     0x01
805 #define SHWFF_REMOVE  0x02
806 #define SHWFF_WAIT    0x04
807
808 BOOL WINAPI SHWaitForFileToOpen(
809         LPCITEMIDLIST pidl, 
810         DWORD dwFlags,
811         DWORD dwTimeout);
812
813 WORD WINAPI ArrangeWindows(
814         HWND hwndParent,
815         DWORD dwReserved,
816         LPCRECT lpRect,
817         WORD cKids,
818         CONST HWND * lpKids);
819
820 /* RegisterShellHook types */
821 #define RSH_DEREGISTER        0
822 #define RSH_REGISTER          1
823 #define RSH_REGISTER_PROGMAN  2
824 #define RSH_REGISTER_TASKMAN  3
825
826 BOOL WINAPI RegisterShellHook(
827         HWND hWnd,
828         DWORD dwType);
829
830 /* SHCreateDefClassObject callback function */
831 typedef HRESULT CALLBACK (*LPFNCDCOCALLBACK)(
832         LPUNKNOWN pUnkOuter,
833         REFIID riidObject,
834         LPVOID *ppvObject);
835
836 HRESULT WINAPI SHCreateDefClassObject(
837         REFIID riidFactory, 
838         LPVOID *ppvFactory,
839         LPFNCDCOCALLBACK lpfnCallback,
840         LPDWORD lpdwUsage, 
841         REFIID riidObject);
842
843 HRESULT WINAPI SHCoCreateInstance(
844         LPCSTR lpszClsid, 
845         REFCLSID rClsid,
846         LPUNKNOWN pUnkOuter,
847         REFIID riid,
848         LPVOID *ppv);
849
850 void WINAPI SHFreeUnusedLibraries();
851
852 /* SHCreateLinks flags */
853 #define SHCLF_PREFIXNAME       0x01
854 #define SHCLF_CREATEONDESKTOP  0x02
855
856 HRESULT WINAPI SHCreateLinks(
857         HWND hWnd,
858         LPCSTR lpszDir, 
859         LPDATAOBJECT lpDataObject,
860         UINT uFlags,
861         LPITEMIDLIST *lppidlLinks);
862
863 /* SHGetNewLinkInfo flags */
864 #define SHGNLI_PIDL        0x01
865 #define SHGNLI_PREFIXNAME  0x02
866 #define SHGNLI_NOUNIQUE    0x04
867
868 BOOL WINAPI SHGetNewLinkInfoA(
869         LPCSTR pszLinkTo,
870         LPCSTR pszDir, 
871         LPSTR pszName,
872         BOOL *pfMustCopy,
873         UINT uFlags);
874
875 BOOL WINAPI SHGetNewLinkInfoW(
876         LPCWSTR pszLinkTo,
877         LPCWSTR pszDir, 
878         LPWSTR pszName,
879         BOOL *pfMustCopy,
880         UINT uFlags);
881 #define SHGetNewLinkInfo WINELIB_NAME_AW(SHGetNewLinkInfo)
882
883 /* policy functions */
884 BOOL WINAPI SHInitRestricted(LPSTR, LPSTR);
885
886 #ifdef __cplusplus
887 } /* extern "C" */
888 #endif /* defined(__cplusplus) */
889
890 #endif /* __WINE_UNDOCSHELL_H */