这几天特别的累,发现自己有那么多的东西都不会,很多的时候真的是想放弃,很多的时候也是被打击的快要失去了信心,不过还好,我没有,我还是每天都充满了希望,我相信每天都会有新的收获。
不过说实话,我发现自己的学习能力真的很强,我对套接字其实根本没有研究,但是做这个项目,还是要用到套接字,本来这个工程的通信不是归我管,但是后来出现了问题,还是落到了我的头上。还好,一个晚上的时间,我就完成了任务。
还是切入正题,工程有个功能是使用ListCtrl显示客户端的文件列表,这个很简单,但是如果要显示每种文件类型的图标,,那么就不好办了,本来想搜集各种文件类型的图标当作资源加入到工程里面,但是这样做的结果就是会累死人。所以另外想办法,然后找到了SHGetFileInfo这个函数。还是看一下代码吧
这个模块实现了循环读取某一个目录下面的文件,并且得到他们的图标,添加到lisectrl的功能
CImageList *pBigImage,*pSmallImage;//这两个是为listctrl提供文件图标的ImangList
int indeximage;
int nCount=imagelistb.GetImageCount();
int nCount2=imagelists.GetImageCount();
for(int m=1;m<nCount;m++) //没有删除index为0的图标,也就是第一个图标是文件夹的图标
{
imagelistb.Remove(m);
}
for(int mm=1;mm<nCount2;mm++)
{
imagelists.Remove(mm);
}
pBigImage=m_list1.GetImageList(LVSIL_SMALL); //指向listctrl现在使用的ImageList
pSmallImage=m_list1.GetImageList(LVSIL_NORMAL); //指向listctrl现在使用的ImageList
CFileFind cFindFiles;
char szFileName[256];
char found[200];
sprintf(szFileName,"%s//*.*",getpath);
BOOL bFound=cFindFiles.FindFile(szFileName);
while(bFound)//这个循环是枚举文件的
{
bFound=(BOOL)cFindFiles.FindNextFile();
if(!cFindFiles.IsDirectory())
{
strcpy(found,cFindFiles.GetFilePath().GetBuffer(200));
SHFILEINFO shfi;
memset(&shfi,0,sizeof(shfi));
SHGetFileInfo(found,
FILE_ATTRIBUTE_NORMAL,
&shfi, sizeof(shfi),
SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME );
indeximage=pSmallImage->Add(shfi.hIcon);//向ImageList里面添加图标
pBigImage->Add(shfi.hIcon);
int nCount=m_list1.GetItemCount();
m_list1.InsertItem(nCount,found,indeximage);
m_list1.SetItemText(nCount,1,"文件");
}
}
不过说实话,我发现自己的学习能力真的很强,我对套接字其实根本没有研究,但是做这个项目,还是要用到套接字,本来这个工程的通信不是归我管,但是后来出现了问题,还是落到了我的头上。还好,一个晚上的时间,我就完成了任务。
还是切入正题,工程有个功能是使用ListCtrl显示客户端的文件列表,这个很简单,但是如果要显示每种文件类型的图标,,那么就不好办了,本来想搜集各种文件类型的图标当作资源加入到工程里面,但是这样做的结果就是会累死人。所以另外想办法,然后找到了SHGetFileInfo这个函数。还是看一下代码吧
这个模块实现了循环读取某一个目录下面的文件,并且得到他们的图标,添加到lisectrl的功能
CImageList *pBigImage,*pSmallImage;//这两个是为listctrl提供文件图标的ImangList
int indeximage;
int nCount=imagelistb.GetImageCount();
int nCount2=imagelists.GetImageCount();
for(int m=1;m<nCount;m++) //没有删除index为0的图标,也就是第一个图标是文件夹的图标
{
imagelistb.Remove(m);
}
for(int mm=1;mm<nCount2;mm++)
{
imagelists.Remove(mm);
}
pBigImage=m_list1.GetImageList(LVSIL_SMALL); //指向listctrl现在使用的ImageList
pSmallImage=m_list1.GetImageList(LVSIL_NORMAL); //指向listctrl现在使用的ImageList
CFileFind cFindFiles;
char szFileName[256];
char found[200];
sprintf(szFileName,"%s//*.*",getpath);
BOOL bFound=cFindFiles.FindFile(szFileName);
while(bFound)//这个循环是枚举文件的
{
bFound=(BOOL)cFindFiles.FindNextFile();
if(!cFindFiles.IsDirectory())
{
strcpy(found,cFindFiles.GetFilePath().GetBuffer(200));
SHFILEINFO shfi;
memset(&shfi,0,sizeof(shfi));
SHGetFileInfo(found,
FILE_ATTRIBUTE_NORMAL,
&shfi, sizeof(shfi),
SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME );
indeximage=pSmallImage->Add(shfi.hIcon);//向ImageList里面添加图标
pBigImage->Add(shfi.hIcon);
int nCount=m_list1.GetItemCount();
m_list1.InsertItem(nCount,found,indeximage);
m_list1.SetItemText(nCount,1,"文件");
}
}