com组件类实现图标重叠为什么看不出来效果 http://www.codeproject.com/Articles/7484/How-to-overlay-an-icon-over-existing-shell-objects里面这个com组件类实现了图标重叠效果,但是我放在自己的工程里,却看不到效果,这是为什么啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我是把他的生成的dll放在我项目的目录下,然后在工程对它使用:(我使用的代码)CoInitialize(NULL); HRESULT hr = NULL; IShellIconOverlayIdentifier* ptr = NULL; CLSID clsid; IClassFactory* p_classfactory = NULL; hr = CLSIDFromProgID(OLESTR("OverlayIcon.MyOverlayIcon"),&clsid); if(FAILED(hr)) { MessageBoxA(NULL,"error1","提示",1); return 0; } hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER, __uuidof(IShellIconOverlayIdentifier),(void **)&ptr); //hr = CoGetClassObject(clsid,CLSCTX_INPROC_SERVER,NULL,IID_IClassFactory,(LPVOID*)&p_classfactory); //if(FAILED(hr)) //{ // MessageBoxA(NULL,"error2","提示",2); // return 0; //} //p_classfactory->CreateInstance(NULL,IID_IShellIconOverlayIdentifier, // (void **)&ptr); if (SUCCEEDED(hr)) { int cchMax = 0; int pIndex = 0; DWORD pdwFlags = 0; int pPriority = 0; if(ptr->IsMemberOf(L"D:\\Work\\1.txt",pdwFlags)) { return 0; } ptr->GetPriority(&pPriority); ptr->GetOverlayInfo(L"res\\my.ico", cchMax, &pIndex, &pdwFlags); ptr->Release(); } CoUninitialize();但是看不到效果,想问问大神们,这是为什么啊~~~求救啊,内牛满面啊 在开始-》运行中用regsvr32.exe注册组件 我在注册表可以找到,注册是成功的,看看GetOverlayInfo。GetPriority。IsMemberOf这三个函数吧:STDMETHODIMP CMyOverlayIcon::GetOverlayInfo( LPWSTR pwszIconFile, int cchMax,int* pIndex, DWORD* pdwFlags){ GetModuleFileNameW(_AtlBaseModule.GetModuleInstance(), pwszIconFile, cchMax); pwszIconFile = L"res\\my.ico"; *pIndex = 0; *pdwFlags = ISIOI_ICONFILE | ISIOI_ICONINDEX; return S_OK;}STDMETHODIMP CMyOverlayIcon::GetPriority(int* pPriority){ // highest priority *pPriority=0; return S_OK;}STDMETHODIMP CMyOverlayIcon::IsMemberOf(LPCWSTR pwszPath, DWORD dwAttrib){ //wchar_t *s = _wcsdup(pwszPath); //HRESULT r = S_FALSE; //_wcslwr(s); // Criteria //if (wcsstr(s, L"codeproject") != 0) // r = S_OK; //free(s); //return r; return S_OK;}这个是那个网址下载下来那个例子的原来代码,我只是把ismemberof改动了一下,看看是不是这三个函数的问题?继续内牛满面啊~~~ 是不是操作系统问题了 ,还有就是res\\my.ico这里的路径对不对了,用全路径看看 我查到需要explorer.exe作为调试进程,可是我不太明白怎么弄,然后使用explorer。exe以后,整个程序的流向是什么样的 屏幕找图找色的原理求解释求拍砖.. 如何获取当前焦点所在的窗口的句柄 刚工作,一个人住,身在他乡,太寂寞了!!!各位如何熬过这段时光的啊??? VC波形图 怎样用vc画excel折线图? CFileDialog的记忆路径如何在选择文件前得到? 收集了好几年的VC编程资料,大家给个评价先! 请教这段修改ACCESS表结构的代码有什么问题? 关于如何写刻录软件 简单的问题:如何对一个combobox进行初始化? 求助:球面点三维坐标到二维坐标的转换 [打印机]问一个AddJob和ScheduleJob添加打印任务的问题
CoInitialize(NULL);
HRESULT hr = NULL;
IShellIconOverlayIdentifier* ptr = NULL;
CLSID clsid;
IClassFactory* p_classfactory = NULL; hr = CLSIDFromProgID(OLESTR("OverlayIcon.MyOverlayIcon"),&clsid);
if(FAILED(hr))
{
MessageBoxA(NULL,"error1","提示",1);
return 0;
} hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,
__uuidof(IShellIconOverlayIdentifier),(void **)&ptr); //hr = CoGetClassObject(clsid,CLSCTX_INPROC_SERVER,NULL,IID_IClassFactory,(LPVOID*)&p_classfactory);
//if(FAILED(hr))
//{
// MessageBoxA(NULL,"error2","提示",2);
// return 0;
//} //p_classfactory->CreateInstance(NULL,IID_IShellIconOverlayIdentifier,
// (void **)&ptr); if (SUCCEEDED(hr))
{
int cchMax = 0;
int pIndex = 0;
DWORD pdwFlags = 0;
int pPriority = 0;
if(ptr->IsMemberOf(L"D:\\Work\\1.txt",pdwFlags))
{
return 0;
} ptr->GetPriority(&pPriority);
ptr->GetOverlayInfo(L"res\\my.ico", cchMax, &pIndex, &pdwFlags);
ptr->Release();
} CoUninitialize();但是看不到效果,想问问大神们,这是为什么啊~~~求救啊,内牛满面啊
STDMETHODIMP CMyOverlayIcon::GetOverlayInfo(
LPWSTR pwszIconFile,
int cchMax,int* pIndex,
DWORD* pdwFlags)
{
GetModuleFileNameW(_AtlBaseModule.GetModuleInstance(), pwszIconFile, cchMax);
pwszIconFile = L"res\\my.ico";
*pIndex = 0;
*pdwFlags = ISIOI_ICONFILE | ISIOI_ICONINDEX; return S_OK;
}STDMETHODIMP CMyOverlayIcon::GetPriority(int* pPriority)
{
// highest priority
*pPriority=0;
return S_OK;
}STDMETHODIMP CMyOverlayIcon::IsMemberOf(LPCWSTR pwszPath, DWORD dwAttrib)
{
//wchar_t *s = _wcsdup(pwszPath);
//HRESULT r = S_FALSE;
//_wcslwr(s);
// Criteria
//if (wcsstr(s, L"codeproject") != 0)
// r = S_OK;
//free(s);
//return r; return S_OK;
}
这个是那个网址下载下来那个例子的原来代码,我只是把ismemberof改动了一下,看看是不是这三个函数的问题?继续内牛满面啊~~~