added some development tools
[windows-sources.git] / developer / VC / WTL80 / Samples / WTLExplorer / ShellMgr.H
blobbb0959be2b984efd921ae88032c1820b0a1d3836
1 // shellmgr.h
3 #ifndef __SHELLMGR_H__
4 #define __SHELLMGR_H__
6 #pragma once
8 #include <shlobj.h>
9 #include <atlctrls.h>
12 class CShellItemIDList
14 public:
15         LPITEMIDLIST m_pidl;
17         CShellItemIDList(LPITEMIDLIST pidl = NULL) : m_pidl(pidl)
18         { }
20         ~CShellItemIDList()
21         {
22                 ::CoTaskMemFree(m_pidl);
23         }
25         void Attach(LPITEMIDLIST pidl)
26         {
27                 ::CoTaskMemFree(m_pidl);
28                 m_pidl = pidl;
29         }
31         LPITEMIDLIST Detach()
32         {
33                 LPITEMIDLIST pidl = m_pidl;
34                 m_pidl = NULL;
35                 return pidl;
36         }
38         bool IsNull() const
39         {
40                 return (m_pidl == NULL);
41         }
43         CShellItemIDList& operator =(LPITEMIDLIST pidl)
44         {
45                 Attach(pidl);
46                 return *this;
47         }
49         LPITEMIDLIST* operator &()
50         {
51                 return &m_pidl;
52         }
54         operator LPITEMIDLIST()
55         {
56                 return m_pidl;
57         }
59         operator LPCTSTR()
60         {
61                 return (LPCTSTR)m_pidl;
62         }
64         operator LPTSTR()
65         {
66                 return (LPTSTR)m_pidl;
67         }
69         void CreateEmpty(UINT cbSize)
70         {
71                 ::CoTaskMemFree(m_pidl);
72                 m_pidl = (LPITEMIDLIST)::CoTaskMemAlloc(cbSize);
73                 ATLASSERT(m_pidl != NULL);
74                 if(m_pidl != NULL)
75                         memset(m_pidl, 0, cbSize);
76         }
80 typedef struct _LVItemData
82         _LVItemData() : ulAttribs(0)
83         { }
84         
85         CComPtr<IShellFolder> spParentFolder;
86         
87         CShellItemIDList lpi;
88         ULONG ulAttribs;
90 } LVITEMDATA, *LPLVITEMDATA;
92 typedef struct _TVItemData
94         _TVItemData()
95         { }
96         
97         CComPtr<IShellFolder> spParentFolder;
98         
99         CShellItemIDList lpi;
100         CShellItemIDList lpifq;
102 } TVITEMDATA, *LPTVITEMDATA;
105 class CShellMgr
107 public:
108         int GetIconIndex(LPITEMIDLIST lpi, UINT uFlags);
110         void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq, LPTVITEM lptvitem);
112         LPITEMIDLIST ConcatPidls(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2);
114         BOOL GetName (LPSHELLFOLDER lpsf, LPITEMIDLIST lpi, DWORD dwFlags, LPTSTR lpFriendlyName);
115         LPITEMIDLIST Next(LPCITEMIDLIST pidl);
116         UINT GetSize(LPCITEMIDLIST pidl);
117         LPITEMIDLIST CopyITEMID(LPITEMIDLIST lpi);
119         LPITEMIDLIST GetFullyQualPidl(LPSHELLFOLDER lpsf, LPITEMIDLIST lpi);
121         BOOL DoContextMenu(HWND hwnd, LPSHELLFOLDER lpsfParent, LPITEMIDLIST lpi, POINT point);
124 #endif //__SHELLMGR_H__