实施叠加图标?

时间:2009-12-29 04:14:58

标签: c++ com mfc

我在http://www.codeproject.com/KB/shell/overlayicon.aspx中阅读了这篇文章。 我有一些我无法回答的问题。请帮帮我?

  1. 当我将项目构建到COM dll时。当我使用其他程序来调用这个DLL。我可以调用哪种方法在所选文件上显示叠加图标?我想我会打电话 首先GetOverlayInfo()并致电IsMemberOf()?只有2个功能?
  2. GetOverlayInfo()。我会在第一个参数中传递什么值?叠加图标的路径?或者将要设置的文件路径覆盖图标吗?你能举个例子吗?
  3. 在以下功能中:

    STDMETHODIMP CMyOverlayIcon::GetOverlayInfo(
        LPWSTR pwszIconFile,
        int cchMax,int* pIndex,
        DWORD* pdwFlags)
    {
     GetModuleFileName(_AtlBaseModule.GetModuleInstance(),pwszIconFile,cchMax);
    
     *pIndex =0;
     *pdwFlags = ISIOI_ICONFILE | ISIOI_ICONINDEX;
    
     return S_OK;
    }
    
  4. 当我从外部程序调用它时,你可以告诉我可以将什么值传递给函数。 你能举例说明如何调用它并将价值转移给它吗?

    1. pwszIconFile
    2. cchMax
    3. pIndex
    4. pdwFlags(当我从外面打电话时,我可以传递哪个值.Ex C#program)

1 个答案:

答案 0 :(得分:1)

  1. 是的,你可以逃脱这两个功能。但是无论如何我都会调用GetPriority(),即使你不使用返回值。您永远不会知道覆盖处理程序是否依赖于该调用(如果您还没有自己编写)。而且你只需要调用一次GetOverlayInfo(),但是你需要为每个要显示覆盖图标的文件调用IsMemberOf()。
  2. 你必须传递(空)缓冲区,并在cchMax中传递缓冲区的长度。然后,Overlay处理程序将使用图标文件的路径填充缓冲区。但你还必须检查pdwFlags和pIndex(两者都由覆盖处理程序填充) - 根据pdwFlags中设置的标志,你要么获得pwszIconFile中图标文件的路径,要么获得包含在其资源中的图标。如果是后者,那么pIndex值是你必须加载的exe文件中图标的资源索引。
  3. 您没有说明为什么要自己调用叠加处理程序。如果您只想在某些列表视图或对话框中显示探索器所执行的图标,则可以使用更简单的路径,而无需读取所有重叠处理程序所在的注册表(并且某些系统覆盖不是甚至在那里注册!)。

    看一下KB192055,也许这是一个更好的方式来满足您的需求?