www.pudn.com > ftpÔ´Âëvcvc++.rar > ftppl.h


/***************************************************************************** 
 *	ftppl.h 
 *****************************************************************************/ 
 
#ifndef _FTPPIDLLIST_H 
#define _FTPPIDLLIST_H 
 
 
#include "ftplist.h" 
 
typedef HRESULT (CALLBACK *LPFNPROCESSITEMCB)(LPVOID pfnProcessItemCB, HINTERNET hint, LPCITEMIDLIST pidlFull, BOOL * pfValidhinst, LPVOID pvData); 
 
HRESULT EnumFolder(LPFNPROCESSITEMCB pfnProcessItemCB, HINTERNET hint, LPCITEMIDLIST pidlFull, CWireEncoding * pwe, BOOL * pfValidhinst, LPVOID pvData); 
int RecursiveProcessPidl(LPVOID pvPidl, LPVOID pvInetEnum); 
 
 
/***************************************************************************** 
 * 
 *	CFtpPidlList 
 * 
 *****************************************************************************/ 
 
class CFtpPidlList      : public IUnknown 
{ 
public: 
    ////////////////////////////////////////////////////// 
    // Public Interfaces 
    ////////////////////////////////////////////////////// 
     
    // *** IUnknown *** 
    virtual STDMETHODIMP_(ULONG) AddRef(void); 
    virtual STDMETHODIMP_(ULONG) Release(void); 
    virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); 
 
public: 
    CFtpPidlList(); 
    ~CFtpPidlList(void); 
 
    // Public Member Functions 
    HRESULT CompareAndDeletePidl(LPCITEMIDLIST pidl); 
    HRESULT ReplacePidl(LPCITEMIDLIST pidlSrc, LPCITEMIDLIST pidlDest); 
    HRESULT InsertSorted(LPCITEMIDLIST pidl); 
    HRESULT RecursiveEnum(LPCITEMIDLIST pidlRoot, LPFNPROCESSITEMCB pfnProcessItemCB, HINTERNET hint, LPVOID pvData); 
    void Enum(PFNDPAENUMCALLBACK pfn, LPVOID pv) { m_pfl->Enum(pfn, pv); }; 
    void DeletePidl(LPITEMIDLIST pidl) { m_pfl->DeleteItemPtr((LPVOID) pidl);  ILFree(pidl); }; 
    void Delete(int nIndex); 
    int GetCount(void)  { return m_pfl->GetCount(); }; 
    int FindPidlIndex(LPCITEMIDLIST pidlToFind, BOOL fCaseInsensitive); 
    LPITEMIDLIST GetPidl(UINT ipv) { return (LPITEMIDLIST) m_pfl->GetItemPtr(ipv); };   // TODO: Rename GetPidlReference() 
    LPITEMIDLIST FindPidl(LPCITEMIDLIST pidlToFind, BOOL fCaseInsensitive); 
    BOOL AreAllFolders(void); 
    BOOL AreAllFiles(void); 
 
    LPCITEMIDLIST * GetPidlList(void); 
    void FreePidlList(LPCITEMIDLIST * ppidl); 
    void TraceDump(LPCITEMIDLIST pidl, LPCTSTR pszCaller); 
 
    void UseCachedDirListings(BOOL fUseCachedDirListings); 
 
    // Friend Functions 
    static int CFtpPidlList::ComparePidlName(LPVOID pvPidl1, LPVOID pvPidl2, LPARAM lParam); 
    friend HRESULT CFtpPidlList_Create(int cpidl, LPCITEMIDLIST rgpidl[], CFtpPidlList ** ppfl); 
    friend HRESULT _EnumFolderPrep(HINTERNET hint, LPCITEMIDLIST pidlFull, CFtpPidlList * pPidlList, CWireEncoding * pwe, LPITEMIDLIST * ppidlCurrFtpPath); 
 
protected: 
    // Private Member Variables 
    int                     m_cRef; 
 
    CFtpList *              m_pfl; 
    CWireEncoding *         m_pwe;          // We don't hold a ref, so we assume the object will outlive us. 
    DWORD                   m_dwInetFlags;  // What flags do we want to set for enumeration? 
 
    // Private Member Functions 
    HRESULT _Fill(int cpidl, LPCITEMIDLIST rgpidl[]); 
    void AssertSorted(void); 
}; 
 
 
#endif // _FTPPIDLLIST_H