// Windows/Shell.h #ifndef __WINDOWS_SHELL_H #define __WINDOWS_SHELL_H #include <windows.h> #include <shlobj.h> #include "../Common/MyString.h" #include "Defs.h" namespace NWindows{ namespace NShell{ ///////////////////////// // CItemIDList #ifndef UNDER_CE class CItemIDList { LPITEMIDLIST m_Object; public: CItemIDList(): m_Object(NULL) {} // CItemIDList(LPCITEMIDLIST itemIDList); // CItemIDList(const CItemIDList& itemIDList); ~CItemIDList() { Free(); } void Free(); void Attach(LPITEMIDLIST object) { Free(); m_Object = object; } LPITEMIDLIST Detach() { LPITEMIDLIST object = m_Object; m_Object = NULL; return object; } operator LPITEMIDLIST() { return m_Object;} operator LPCITEMIDLIST() const { return m_Object;} LPITEMIDLIST* operator&() { return &m_Object; } LPITEMIDLIST operator->() { return m_Object; } // CItemIDList& operator=(LPCITEMIDLIST object); // CItemIDList& operator=(const CItemIDList &object); }; ///////////////////////////// // CDrop class CDrop { HDROP m_Object; bool m_MustBeFinished; bool m_Assigned; void Free(); public: CDrop(bool mustBeFinished) : m_MustBeFinished(mustBeFinished), m_Assigned(false) {} ~CDrop() { Free(); } void Attach(HDROP object); operator HDROP() { return m_Object;} bool QueryPoint(LPPOINT point) { return BOOLToBool(::DragQueryPoint(m_Object, point)); } void Finish() { ::DragFinish(m_Object); } UINT QueryFile(UINT fileIndex, LPTSTR fileName, UINT fileNameSize) { return ::DragQueryFile(m_Object, fileIndex, fileName, fileNameSize); } #ifndef _UNICODE UINT QueryFile(UINT fileIndex, LPWSTR fileName, UINT fileNameSize) { return ::DragQueryFileW(m_Object, fileIndex, fileName, fileNameSize); } #endif UINT QueryCountOfFiles(); UString QueryFileName(UINT fileIndex); void QueryFileNames(UStringVector &fileNames); }; #endif ///////////////////////////// // Functions bool GetPathFromIDList(LPCITEMIDLIST itemIDList, CSysString &path); bool BrowseForFolder(LPBROWSEINFO lpbi, CSysString &resultPath); bool BrowseForFolder(HWND owner, LPCTSTR title, LPCTSTR initialFolder, CSysString &resultPath); #ifndef _UNICODE bool GetPathFromIDList(LPCITEMIDLIST itemIDList, UString &path); bool BrowseForFolder(LPBROWSEINFO lpbi, UString &resultPath); bool BrowseForFolder(HWND owner, LPCWSTR title, LPCWSTR initialFolder, UString &resultPath); #endif }} #endif