-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathShellItemIDList.hpp
73 lines (59 loc) · 963 Bytes
/
ShellItemIDList.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#pragma once
#ifndef SHITEMID_HPP
#define SHITEMID_HPP
class CShellItemIDList
{
public:
LPITEMIDLIST m_pidl;
CShellItemIDList(LPITEMIDLIST pidl = NULL) : m_pidl(pidl)
{ }
~CShellItemIDList()
{
::CoTaskMemFree(m_pidl);
}
void Attach(LPITEMIDLIST pidl)
{
::CoTaskMemFree(m_pidl);
m_pidl = pidl;
}
LPITEMIDLIST Detach()
{
LPITEMIDLIST pidl = m_pidl;
m_pidl = NULL;
return pidl;
}
bool IsNull() const
{
return (m_pidl == NULL);
}
CShellItemIDList& operator =(LPITEMIDLIST pidl)
{
Attach(pidl);
return *this;
}
LPITEMIDLIST* operator &()
{
return &m_pidl;
}
operator LPITEMIDLIST()
{
return m_pidl;
}
operator LPCTSTR()
{
return (LPCTSTR)m_pidl;
}
operator LPTSTR()
{
return (LPTSTR)m_pidl;
}
void CreateEmpty(UINT cbSize)
{
::CoTaskMemFree(m_pidl);
m_pidl = (LPITEMIDLIST)::CoTaskMemAlloc(cbSize);
ATLASSERT(m_pidl != NULL);
if(m_pidl != NULL)
memset(m_pidl, 0, cbSize);
}
};
#endif