不使用ATL,如何使用IShellIconOverlayIdentifier组件?

一魅 2017-03-23 11:29:43
我实现了一个Shell扩展,需要增加一个像SVN标识文件状态的功能,我定义了一个类如下:
class ATL_NO_VTABLE COverlayIcon : 
public CComObjectRootEx<CComSingleThreadModel>,
public IShellIconOverlayIdentifier
{
public:
COverlayIcon()
{
}

CRefPtr<CShellFolder> m_spFolder;


BEGIN_COM_MAP(COverlayIcon)
COM_INTERFACE_ENTRY(IShellIconOverlayIdentifier)
END_COM_MAP()

HRESULT Init(CShellFolder* pFolder);

// IShellIconOverlayIdentifier Methods
STDMETHOD(GetOverlayInfo)(LPWSTR pwszIconFile,int cchMax,int *pIndex,DWORD* pdwFlags);
STDMETHOD(GetPriority)(int* pPriority);
STDMETHOD(IsMemberOf)(LPCWSTR pwszPath,DWORD dwAttrib);

HRESULT FinalConstruct()
{
return S_OK;
}

void FinalRelease()
{
}

public:

};


STDMETHODIMP COverlayIcon::GetOverlayInfo(
LPWSTR pwszIconFile,
int cchMax,int* pIndex,
DWORD* pdwFlags)
{
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)
{
return S_OK;
}


并且在IShellFolder组件 函数里面GetUIObjectOf、CreateViewObject都使用了下面的代码
		if (riid == IID_IShellIconOverlayIdentifier)
{
DMMessageBox(NULL,L"1",L"2",0);
CComObject<COverlayIcon>* pOverlayIcon = NULL;
HR( CComObject<COverlayIcon>::CreateInstance(&pOverlayIcon) );
CComPtr<IUnknown> spKeepAlive = pOverlayIcon->GetUnknown();
HR( pOverlayIcon->Init(this) );
return pOverlayIcon->QueryInterface(riid, ppRetVal);
}


注册表也增加成功了,但是调试的时候发现根本就没有走到
		if (riid == IID_IShellIconOverlayIdentifier)
{
DMMessageBox(NULL,L"1",L"2",0);
CComObject<COverlayIcon>* pOverlayIcon = NULL;
HR( CComObject<COverlayIcon>::CreateInstance(&pOverlayIcon) );
CComPtr<IUnknown> spKeepAlive = pOverlayIcon->GetUnknown();
HR( pOverlayIcon->Init(this) );
return pOverlayIcon->QueryInterface(riid, ppRetVal);
}
里面,请问有谁知道怎么回事么
...全文
932 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
一魅 2017-03-23
  • 打赏
  • 举报
回复
只有10个积分了,都没发去技术区发帖,求助各位大神帮忙看下问题,非常感谢。。。。

1,508

社区成员

发帖
与我相关
我的任务
社区描述
Windows专区 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧