FTP编程,怎么获得服务器上文件的图标? 能否指点一下,谢了. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 通常的“能够显示FTP服务器文件图标的”FTP软件的处理方案:1。取得文件后缀名;2。查询本机注册表里该后缀名对应的图标(比如*.txt,就显示记事本那个图标),并显示(如果没有,比如是*.qqq,就显示为普通模式) ftp的协议中好像没有此功能。我曾径做这方面的程序时,实现方案也是和 huangbeyond(校园人渣) 相同。 m_ListFileList 为CListCtrl, m_ImageList为CImageListHIMAGELIST hSystemSmallImageList;SHFILEINFO sfi;// 获取系统图标列表hSystemSmallImageList = (HIMAGELIST)SHGetFileInfo((LPCSTR)"C:\\", 0,&sfi,sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);// Attach ImageList to ListViewif (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);就可以显示了. SHGetFileInfo(str, FILE_ATTRIBUTE_NORMAL, &shFi, sizeof(shFi), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);我调用上面的语句,一般的图标都可以显示了,不过就是目录不能显示(显示成了不知名的扩展名),不知道为什么? 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 ;} 求教关于LoadIcon加载ico图标的问题 请推荐些windwos下socket的ftp编程的资料,谢谢了 如何以一个字符判断产生这个字符的键的virtual-key 关于CStatic 哪里有《windows程序设计》的读书笔记呀?? 菜问题:多线程中怎么定义一个全局变量?怎么在启动其它线程时使用另外一个类中的函数? List Control该怎么用? dll里使用回调函数,调用的时候有问题 如何在一个DIRECTX全屏游戏窗口中画线和输出文字 菜鸟求教 请问CALLBACK是数据类型吗? 是高手就一定要进,这个异常会使程序自动退出吗?讲解有道理的高人送分。。。
2。查询本机注册表里该后缀名对应的图标(比如*.txt,就显示记事本那个图标),并显示(如果没有,比如是*.qqq,就显示为普通模式)
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);就可以显示了.
FILE_ATTRIBUTE_NORMAL,
&shFi, sizeof(shFi),
SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
我调用上面的语句,一般的图标都可以显示了,不过就是目录不能显示(显示成了不知名的扩展名),不知道为什么?
{
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 ;
}