能否指点一下,谢了.

解决方案 »

  1.   

    通常的“能够显示FTP服务器文件图标的”FTP软件的处理方案:1。取得文件后缀名;
    2。查询本机注册表里该后缀名对应的图标(比如*.txt,就显示记事本那个图标),并显示(如果没有,比如是*.qqq,就显示为普通模式)
      

  2.   

    ftp的协议中好像没有此功能。我曾径做这方面的程序时,实现方案也是和 huangbeyond(校园人渣) 相同。
      

  3.   

    m_ListFileList 为CListCtrl, m_ImageList为CImageList
    HIMAGELIST  hSystemSmallImageList;
    SHFILEINFO  sfi;
    // 获取系统图标列表
    hSystemSmallImageList = (HIMAGELIST)SHGetFileInfo((LPCSTR)"C:\\", 
                           0,&sfi,sizeof(SHFILEINFO), 
                           SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
    // Attach ImageList to ListView
    if (hSystemSmallImageList)
    {
      m_ImageList.Attach(hSystemSmallImageList);
      m_ListFileList.SetImageList(&m_ImageList, LVSIL_SMALL); 
    }以后获得文件名,假设是CString Filename 以后就用
    SHFILEINFO  sfi;
    SHGetFileInfo(LPCTSTR(Filename),0,&sfi, sizeof(sfi),SHGFI_SMALLICON |SHGFI_SYSICONINDEX); 来获得它系统的图标的Index. sfi.iIcon就是它的index.以后就直接用m_ListFileList.InsertItem(xxxx,xxxxx,图标的index);就可以显示了.
      

  4.   

    SHGetFileInfo(str, 
    FILE_ATTRIBUTE_NORMAL,
    &shFi, sizeof(shFi),
    SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
    我调用上面的语句,一般的图标都可以显示了,不过就是目录不能显示(显示成了不知名的扩展名),不知道为什么?
      

  5.   

    void CMainFrame::GetFileIcon(CString& fileName,int nDir,int* iIcon,int* iIconSel)
    {
    CString str=fileName;// if(str.Right(1)!="\\")
    // str+="\\";

    TCHAR szPath[MAX_PATH] = { 0 };
    if (GetSystemDirectory(szPath, MAX_PATH) == 0)
    {
    *iIcon     = -1;
    AfxMessageBox("取得系统目录出错");
    return ;
    }
    SHFILEINFO shFi;
    memset(&shFi,0,sizeof(shFi));
    if(nDir==DIRECTORYICON)
    {
    SHGetFileInfo(szPath, 0, &shFi, sizeof(SHFILEINFO), 
    SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
    *iIcon = shFi.iIcon;
    }
    else
    { SHGetFileInfo(str, 
    FILE_ATTRIBUTE_NORMAL,
    &shFi, sizeof(shFi),
    SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);

    }
    *iIcon=shFi.iIcon;
    DestroyIcon(shFi.hIcon); return ;
    }