1 // Windows/Shell.h
2 
3 #ifndef __WINDOWS_SHELL_H
4 #define __WINDOWS_SHELL_H
5 
6 #include <windows.h>
7 #include <shlobj.h>
8 
9 #include "../Common/MyString.h"
10 
11 #include "Defs.h"
12 
13 namespace NWindows{
14 namespace NShell{
15 
16 /////////////////////////
17 // CItemIDList
18 #ifndef UNDER_CE
19 
20 class CItemIDList
21 {
22   LPITEMIDLIST m_Object;
23 public:
CItemIDList()24   CItemIDList(): m_Object(NULL) {}
25   // CItemIDList(LPCITEMIDLIST itemIDList);
26   // CItemIDList(const CItemIDList& itemIDList);
~CItemIDList()27   ~CItemIDList() { Free(); }
28   void Free();
Attach(LPITEMIDLIST object)29   void Attach(LPITEMIDLIST object)
30   {
31     Free();
32     m_Object = object;
33   }
Detach()34   LPITEMIDLIST Detach()
35   {
36     LPITEMIDLIST object = m_Object;
37     m_Object = NULL;
38     return object;
39   }
LPITEMIDLIST()40   operator LPITEMIDLIST() { return m_Object;}
LPCITEMIDLIST()41   operator LPCITEMIDLIST() const { return m_Object;}
42   LPITEMIDLIST* operator&() { return &m_Object; }
43   LPITEMIDLIST operator->() { return m_Object; }
44 
45   // CItemIDList& operator=(LPCITEMIDLIST object);
46   // CItemIDList& operator=(const CItemIDList &object);
47 };
48 
49 /////////////////////////////
50 // CDrop
51 
52 class CDrop
53 {
54   HDROP m_Object;
55   bool m_MustBeFinished;
56   bool m_Assigned;
57   void Free();
58 public:
CDrop(bool mustBeFinished)59   CDrop(bool mustBeFinished) : m_MustBeFinished(mustBeFinished), m_Assigned(false) {}
~CDrop()60   ~CDrop() { Free(); }
61 
62   void Attach(HDROP object);
HDROP()63   operator HDROP() { return m_Object;}
QueryPoint(LPPOINT point)64   bool QueryPoint(LPPOINT point)
65     { return BOOLToBool(::DragQueryPoint(m_Object, point)); }
Finish()66   void Finish() {  ::DragFinish(m_Object); }
QueryFile(UINT fileIndex,LPTSTR fileName,UINT fileNameSize)67   UINT QueryFile(UINT fileIndex, LPTSTR fileName, UINT fileNameSize)
68     { return ::DragQueryFile(m_Object, fileIndex, fileName, fileNameSize); }
69   #ifndef _UNICODE
QueryFile(UINT fileIndex,LPWSTR fileName,UINT fileNameSize)70   UINT QueryFile(UINT fileIndex, LPWSTR fileName, UINT fileNameSize)
71     { return ::DragQueryFileW(m_Object, fileIndex, fileName, fileNameSize); }
72   #endif
73   UINT QueryCountOfFiles();
74   UString QueryFileName(UINT fileIndex);
75   void QueryFileNames(UStringVector &fileNames);
76 };
77 
78 #endif
79 
80 /////////////////////////////
81 // Functions
82 
83 bool GetPathFromIDList(LPCITEMIDLIST itemIDList, CSysString &path);
84 bool BrowseForFolder(LPBROWSEINFO lpbi, CSysString &resultPath);
85 bool BrowseForFolder(HWND owner, LPCTSTR title, LPCTSTR initialFolder, CSysString &resultPath);
86 
87 #ifndef _UNICODE
88 bool GetPathFromIDList(LPCITEMIDLIST itemIDList, UString &path);
89 bool BrowseForFolder(LPBROWSEINFO lpbi, UString &resultPath);
90 bool BrowseForFolder(HWND owner, LPCWSTR title, LPCWSTR initialFolder, UString &resultPath);
91 #endif
92 }}
93 
94 #endif
95