问题描述
大家, 我使用 Flickr 驱动外壳扩展( https://www.viksoe.dk/code/flickrdrive.htm ) 去写个云盘,发现覆盖扩展和左边的树无法正常显示。 Overlay扩展在其他本地盘可以正常显示,但无法显示云盘中的文件夹。可以显示资源管理器左侧树中的二级目录,但无法显示二级以下的目录。 如图,现在想问一下怎么解决!
#pragma once
class CShellFolder;
class ATL_NO_VTABLE COverlayIcon:
public CComObjectRootEx<CComSingleThreadModel>,public CComCoClass<COverlayIcon,&CLSID_OverlayIcon>,//public IdispatchImpl<IMyOverlayIcon,&IID_IMyOverlayIcon,&LIBID_OverlayIconLib,/*wMajor =*/ 1,/*wMinor =*/ 0>,public IShellIconOverlayIdentifier
{
public:
//DECLARE_REGISTRY_RESOURCEID(IDR_MYOVERLAYICON)
CRefPtr<CShellFolder> m_spFolder;
CComPtr<IDataObject> m_spDataObject;
CPidl m_pidlItem;
bool m_bAcceptFmt;
BEGIN_COM_MAP(COverlayIcon)
//COM_INTERFACE_ENTRY(Idispatch)
COM_INTERFACE_ENTRY(IShellIconOverlayIdentifier)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
static HRESULT WINAPI UpdateRegistry(BOOL bRegister) throw();
HRESULT Init(CShellFolder* pFolder,PCUITEMID_CHILD pidlItem,HWND hWnd);
//STDMETHOD(IsMemberOf)(THIS_ _In_ PCWSTR pwszPath,DWORD dwAttrib);
//STDMETHOD(GetoverlayInfo)(THIS_ _Out_writes_(cchMax) PWSTR pwszIconFile,int cchMax,_Out_ int * pIndex,_Out_ DWORD * pdwFlags) PURE;
//STDMETHOD(GetPriority)(THIS_ _Out_ int * pIPriority) PURE;
// IShellIconOverlayIdentifier Methods
STDMETHOD(GetoverlayInfo)(LPWSTR pwszIconFile,int *pIndex,DWORD* pdwFlags);
STDMETHOD(GetPriority)(int* pPriority);
STDMETHOD(IsMemberOf)(LPCWSTR pwszPath,DWORD dwAttrib);
};
#include "stdafx.h"
#include "OverlayIcon.h"
#include "ShellFolder.h"
STDMETHODIMP COverlayIcon::GetoverlayInfo(
LPWSTR pwszIconFile,int* pIndex,DWORD* pdwFlags)
{
//GetmodulefileNameW(_AtlBaseModule.GetModuleInstance(),pwszIconFile,cchMax);
pwszIconFile = _T("c:\\test.ico");
*pIndex = 1;
*pdwFlags = ISIOI_ICONFILE;// | ISIOI_ICONINDEX;
MessageBox(NULL,_T("ss"),_T("sdf"),MB_OK);
return S_OK;
}
// IShellIconOverlayIdentifier Method Implementation
// returns the priority of this overlay 0 being the highest.
// this overlay is always selected do to its high priority
STDMETHODIMP COverlayIcon::GetPriority(int* pPriority)
{
// highest priority
*pPriority = 0;
return S_OK;
}
// IShellIconOverlayIdentifier Method Implementation
// IShellIconOverlayIdentifier::IsMemberOf
// Returns Whether the object should have this overlay or not
STDMETHODIMP COverlayIcon::IsMemberOf(LPCWSTR pwszPath,DWORD dwAttrib)
{
//wchar_t *s = _wcsdup(pwszPath);
HRESULT r = S_OK;
//_wcslwr(s);
//// Criteria
//if (wcsstr(s,L"codeproject") != 0)
// r = S_OK;
//free(s);
return r;
}
HRESULT WINAPI COverlayIcon::UpdateRegistry(BOOL bRegister) throw()
{
// COM registration is done by CShellFolder instance
return S_OK;
}
HRESULT COverlayIcon::Init(CShellFolder* pFolder,HWND hWnd)
{
ATLTRACE(L"CDropTarget::Init\n");
ATLASSERT(m_spFolder == NULL);
m_spFolder = pFolder;
m_pidlItem = pidlItem;
return S_OK;
}
OBJECT_ENTRY_AUTO(CLSID_OverlayIcon,COverlayIcon)
[OverlayIcon 可以显示在本地磁盘][1] [1]:https://i.stack.imgur.com/762Zd.png [云盘上无法显示OverlayIcon][2] [2]:https://i.stack.imgur.com/ct2as.png 【二级目录无法显示,三级以下目录无法显示】[3] [3]:https://i.stack.imgur.com/JJspt.png
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)