⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 urlffold.cpp

📁 大量windows shell编程例子
💻 CPP
字号:
// CUrlfFolder member functions
#include "stdhdr.h"
#include "Urlfenum.h"
#include "Urlfview.h"

extern UINT g_cRefThisDll;


 
/*-------------------------------------------------------------------*/
// Procedure....: CUrlfFolder()
// Description..: Constructor of the class
/*-------------------------------------------------------------------*/
CUrlfFolder::CUrlfFolder()
{
    m_cRef = 1;
    g_cRefThisDll++;
}






/*-------------------------------------------------------------------*/
// Procedure....: ~CUrlfFolder()
// Description..: Destructor of the class
/*-------------------------------------------------------------------*/
CUrlfFolder::~CUrlfFolder()
{
    g_cRefThisDll--;
}






/*-------------------------------------------------------------------*/
// Procedure....: ::QueryInterface()
// Description..: return a pointer to the specified interface
/*-------------------------------------------------------------------*/
STDMETHODIMP CUrlfFolder::QueryInterface( REFIID riid, LPVOID FAR *ppv )
{
    if( IsEqualIID(riid, IID_IUnknown) ) 
	{
        *ppv = (LPUNKNOWN) (IShellFolder *) this;
        m_cRef++;
        return NOERROR;
    }
    else 
	if( IsEqualIID(riid, IID_IShellFolder) ) 
	{
        *ppv = (IShellFolder *) this;
        m_cRef++;
        return NOERROR;
    }
    else 
	if( IsEqualIID(riid, IID_IPersistFolder) ) 
	{
        *ppv = (IPersistFolder *) this;
        m_cRef++;
        return NOERROR;
    }
    else 
	{
        *ppv = NULL;
        return ResultFromScode( E_NOINTERFACE );
    }
}





/*-------------------------------------------------------------------*/
// Procedure....: ::AddRef()
// Description..: increase the reference count for the server 
/*-------------------------------------------------------------------*/
STDMETHODIMP_(ULONG) CUrlfFolder::AddRef()
{
    return ++m_cRef;
}
 




/*-------------------------------------------------------------------*/
// Procedure....: ::Release()
// Description..: decrease the reference count for the server 
/*-------------------------------------------------------------------*/
STDMETHODIMP_(ULONG) CUrlfFolder::Release()
{
    if( --m_cRef==0 )
        delete this;
    return m_cRef;
}





/*-------------------------------------------------------------------*/
// Procedure....: GetFileName()
// Description..: Returns the name of the file being displayed
/*-------------------------------------------------------------------*/
STDMETHODIMP CUrlfFolder::GetFileName( LPTSTR szFileName, INT iBufSize )
{
	if( szFileName==NULL )
		return E_OUTOFMEMORY;

	lstrcpyn( szFileName, m_szFile, iBufSize );
	return NOERROR;
}


// IMPLEMENTED
// IShellFolder methods
//
//   - EnumObjects
//   - CompareIDs
//   - CreateViewObject
//   - GetAttributesOf
//   - GetUIObjectOf
//   - GetDisplayNameOf
//


/*-------------------------------------------------------------------*/
// Procedure....: EnumObjects()
// Description..: Returns a pointer to an item enumerator 
/*-------------------------------------------------------------------*/
STDMETHODIMP CUrlfFolder::EnumObjects( HWND hwndOwner, 
   DWORD grfFlags, LPENUMIDLIST *ppEnum )
{
	CUrlfEnumItem *phei = new CUrlfEnumItem( this, grfFlags );
	if( !phei )  return E_OUTOFMEMORY;

	phei->AddRef();
	HRESULT hr = phei->QueryInterface( IID_IEnumIDList, (LPVOID*)ppEnum );
	phei->Release();

	return hr;
}



/*-------------------------------------------------------------------*/
// Procedure....: CompareIDs()
// Description..: Compares two items in a folder
/*-------------------------------------------------------------------*/
STDMETHODIMP CUrlfFolder::CompareIDs( LPARAM lParam, 
   LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2 )
{
	return E_NOTIMPL;
}


/*-------------------------------------------------------------------*/
// Procedure....: CreateViewObject()
// Description..: Creates a view for the folder
/*-------------------------------------------------------------------*/
STDMETHODIMP CUrlfFolder::CreateViewObject( HWND hwndOwner, 
   REFIID riid, LPVOID FAR* ppvObj )
{
	IUnknown *pObj = NULL;

	if( riid != IID_IShellView )
		return E_NOINTERFACE;
	
	CUrlfView *phv = new CUrlfView( this );
	if( !phv )  return E_OUTOFMEMORY;

	phv->AddRef();
	HRESULT hr = phv->QueryInterface( riid, ppvObj );
	phv->Release();

	return NOERROR;
}


/*-------------------------------------------------------------------*/
// Procedure....: GetAttributesOf()
// Description..: Returns the attribute of some objects
/*-------------------------------------------------------------------*/
STDMETHODIMP CUrlfFolder::GetAttributesOf( UINT cidl, 
   LPCITEMIDLIST FAR* apidl, ULONG FAR* rgfInOut )
{
	return E_NOTIMPL;
}



/*-------------------------------------------------------------------*/
// Procedure....: GetUIObjectOf()
// Description..: Returns an interface to perform UI actions
/*-------------------------------------------------------------------*/
STDMETHODIMP CUrlfFolder::GetUIObjectOf( HWND hwndOwner, 
   UINT cidl, LPCITEMIDLIST FAR* apidl, REFIID riid, 
   UINT FAR* prgfInOut, LPVOID FAR* ppvObj )
{
/*	IUnknown *pObj = NULL;

	// IExtractIcon required
	if( riid==IID_IExtractIcon )
	{
		if( cidl != 1 )  return E_INVALIDARG;
	}
	else 
	// IContextMenu required
	if( riid==IID_IContextMenu )
	{
		if( cidl <1 ) 	return E_INVALIDARG;
	}
	else 
	// IDataObject required
	if( riid==IID_IDataObject )
	{
		if( cidl <1 ) 	return E_INVALIDARG;
	}
	else
		return E_NOINTERFACE;

	if( !pObj ) 	
		return E_OUTOFMEMORY;
	
	pObj->AddRef();
	HRESULT hr = pObj->QueryInterface( riid, ppvObj );
	pObj->Release();

	return hr;
*/
	return E_NOTIMPL;
}


/*-------------------------------------------------------------------*/
// Procedure....: GetDisplayNameOf()
// Description..: Returns the name to display
/*-------------------------------------------------------------------*/
STDMETHODIMP CUrlfFolder::GetDisplayNameOf( LPCITEMIDLIST pidl, 
   DWORD dwReserved, LPSTRRET lpName )
{
	return E_NOTIMPL;
}




// UNIMPLEMENTED
// IShellFolder methods
//
//   - ParseDisplayName
//   - BindToObject
//   - BindToStorage
//   - SetNameOf
//



/*-------------------------------------------------------------------*/
// Procedure....: ::ParseDisplayName()
// Description..: 
/*-------------------------------------------------------------------*/
STDMETHODIMP CUrlfFolder::ParseDisplayName( HWND hwndOwner,
   LPBC pbc, LPOLESTR lpszDisplayName, ULONG FAR* pchEaten, 
   LPITEMIDLIST * ppidl, ULONG *pdwAttributes)
{
	return E_NOTIMPL;
}


/*-------------------------------------------------------------------*/
// Procedure....: ::BindToObject()
// Description..: 
/*-------------------------------------------------------------------*/
STDMETHODIMP CUrlfFolder::BindToObject( LPCITEMIDLIST pidl, 
   LPBC pbc, REFIID riid, LPVOID FAR* ppvObj )
{
	return E_NOTIMPL;
}


/*-------------------------------------------------------------------*/
// Procedure....: ::BindToStorage()
// Description..: 
/*-------------------------------------------------------------------*/
STDMETHODIMP CUrlfFolder::BindToStorage( LPCITEMIDLIST pidl, 
   LPBC pbc, REFIID riid, LPVOID FAR* ppvObj )
{
	return E_NOTIMPL;
}


/*-------------------------------------------------------------------*/
// Procedure....: ::SetNameOf()
// Description..: 
/*-------------------------------------------------------------------*/
STDMETHODIMP CUrlfFolder::SetNameOf( HWND hwndOwner, LPCITEMIDLIST pidl,
	LPCOLESTR lpszName, DWORD dwReserved, LPITEMIDLIST FAR* ppidlOut )
{
	return E_NOTIMPL;
}





// IMPLEMENTED
// IPersistFolder methods
//
//   - GetClassID
//   - Initialize



/*-------------------------------------------------------------------*/
// Procedure....: GetClassID()
// Description..: Returns the CLSID of this server
/*-------------------------------------------------------------------*/
STDMETHODIMP CUrlfFolder::GetClassID( LPCLSID lpClassID )
{
	*lpClassID = CLSID_UrlfFolder;
	return NOERROR;
}



/*-------------------------------------------------------------------*/
// Procedure....: Initialize()
// Description..: Save the name of the folder
/*-------------------------------------------------------------------*/
STDMETHODIMP CUrlfFolder::Initialize( LPCITEMIDLIST pidl )
{
	SHGetPathFromIDList( pidl, m_szFile );
	return S_OK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -