mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.3 KiB
100 lines
2.3 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1994 - 1995.
|
|
//
|
|
// File: cidlist.h
|
|
//
|
|
// Contents: CIDList class definition, for manipulating shell IDLists
|
|
//
|
|
// History: 6-21-95 davepl Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
//
|
|
// When we need to NUL terminate an IDList, we need an empty slot at the end
|
|
// of the list for a stub SHITEMID.mkid.cb member, which is a USHORT, so use
|
|
// this define (instead of sizeof(USHORT) all over the code)
|
|
//
|
|
// BUGBUG Can this be written as sizeof(SHITEMID.mkid.cb) or equivalent?
|
|
|
|
const size_t CB_IDLIST_TERMINATOR (sizeof(USHORT));
|
|
|
|
#ifdef GetSize
|
|
#undef GetSize
|
|
#endif
|
|
|
|
class CIDList
|
|
{
|
|
public:
|
|
SHITEMID m_mkid;
|
|
|
|
//
|
|
// Default constructor. Simply inits the cb field to 0 to indicate that
|
|
// this is an empty IDList initially.
|
|
//
|
|
|
|
CIDList()
|
|
{
|
|
m_mkid.cb = 0;
|
|
}
|
|
|
|
//
|
|
// IsEmpty
|
|
//
|
|
|
|
BOOL IsEmpty() const
|
|
{
|
|
return m_mkid.cb == 0 ? TRUE : FALSE;
|
|
}
|
|
|
|
//
|
|
// Skip - advanced this pidl pointer by 'cb' bytes
|
|
//
|
|
|
|
CIDList * Skip(const UINT cb) const
|
|
{
|
|
return (CIDList *) (((BYTE *)this) + cb);
|
|
}
|
|
|
|
//
|
|
// Next - returns this next entry in this idlist
|
|
//
|
|
|
|
CIDList * Next() const
|
|
{
|
|
return Skip(m_mkid.cb);
|
|
}
|
|
|
|
//
|
|
// GetSize - returns the size, in bytes, of the IDList starting
|
|
// at this pidl
|
|
//
|
|
|
|
UINT GetSize() const;
|
|
|
|
//
|
|
// Clone - uses the shell's task allocator to allocate memory for
|
|
// a clone of this pidl (the _entire_ pidl starting here)
|
|
// and copies this pidl into that buffer
|
|
//
|
|
|
|
HRESULT CloneTo(CIDList ** ppidlclone) const;
|
|
|
|
//
|
|
// FindLastID - Finds the last itemid at the end of this id list
|
|
//
|
|
|
|
CIDList * FindLastID();
|
|
|
|
//
|
|
// IsParent Tests whether or not _this_ pidl is a parent of some other
|
|
// pidl. If fImmediate is TRUE, this pidl must be the _direct_
|
|
// parent of the other (ie: father, not grandfather)
|
|
|
|
BOOL IsParentOf(const CIDList * pidlother, BOOL fImmediate) const
|
|
{
|
|
return ILIsParent((LPCITEMIDLIST) this, (LPCITEMIDLIST) pidlother, fImmediate);
|
|
}
|
|
};
|
|
|