http://www.codeproject.com/Articles/7484/How-to-overlay-an-icon-over-existing-shell-objects里面这个com组件类实现了图标重叠效果,但是我放在自己的工程里,却看不到效果,这是为什么啊

解决方案 »

  1.   

    我是把他的生成的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();但是看不到效果,想问问大神们,这是为什么啊~~~求救啊,内牛满面啊
      

  2.   

    在开始-》运行中用regsvr32.exe注册组件
      

  3.   

    我在注册表可以找到,注册是成功的,看看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改动了一下,看看是不是这三个函数的问题?继续内牛满面啊~~~
      

  4.   

    是不是操作系统问题了 ,还有就是res\\my.ico这里的路径对不对了,用全路径看看
      

  5.   

    我查到需要explorer.exe作为调试进程,可是我不太明白怎么弄,然后使用explorer。exe以后,整个程序的流向是什么样的