public HRESULT Next(uint celt, IntPtr[] rgelt, out uint pceltFetched) { uint celtFetched = 0; HRESULT hr = celt <= 1 ? HRESULT.S_OK : HRESULT.E_INVALIDARG; if (hr.Succeeded) { uint i = 0; while (hr.Succeeded && i < celt && m_nItem < m_aData.Length) { var fSkip = false; if (!m_grfFlags.IsFlagSet(SHCONTF.SHCONTF_STORAGE)) { if (m_aData[m_nItem].fIsFolder) { if (!m_grfFlags.IsFlagSet(SHCONTF.SHCONTF_FOLDERS)) { // this is a folder, but caller doesnt want folders fSkip = true; } } else { if (!m_grfFlags.IsFlagSet(SHCONTF.SHCONTF_NONFOLDERS)) { // this is a file, but caller doesnt want files fSkip = true; } } } if (!fSkip) { hr = CFolderViewImplFolder.CreateChildID(m_aData[m_nItem].szName, m_nLevel, m_aData[m_nItem].nSize, m_aData[m_nItem].nSides, m_aData[m_nItem].fIsFolder, out PIDL pidl); if (hr.Succeeded) { rgelt[i] = pidl.DangerousGetHandle(); celtFetched++; i++; } } m_nItem++; } } pceltFetched = celtFetched; return((celtFetched == celt) ? HRESULT.S_OK : HRESULT.S_FALSE); }
public CFolderViewImplEnumIDList(SHCONTF grfFlags, int nLevel, CFolderViewImplFolder pFolderViewImplShellFolder) { m_grfFlags = grfFlags; m_nLevel = nLevel; m_pFolder = pFolderViewImplShellFolder; Initialize(); }