176上位机VC MFC修改文件夹图标
176上位机VC MFC修改文件夹图标 功能展示 我们电脑上文件夹图标也是可以修改的,可以通过鼠标进行修改,也可以通过编程进行修改;我们当前例程实现用指定图标替换文件夹默认图标,效果如图; 要点提示 图标的修改很简单,只要在要修改图标的文件夹内建立一个Desktop.ini文件,在文件内添加节名.ShellClassInfo,再写入两键名IconFile,IconIndex,分别为写入图标的路径和图标的索引就可了; 当然为了功能完善些,还可以把图标复制到文件夹内,再把此图标与新建立的Desktop.ini文件设置为隐藏及系统属性,不让用户知晓以免误操作删除; 实现功能 1.新建基于对话框的应用程序 2.添加三个变量CString m_sFoderPath;//要修改图标的文件夹路径 CString m_sIconPath;//图标路径 CString m_sIconName;//图标名称含后缀 拖拽图片控件ID为IDC_FOLDERICON用于显示要修改的文件夹图片,及另一图片控件ID为用于修改文件夹的图标; 拖拽三个按钮<选择要修改的文件夹><选择图标><执行修改>关联函数实现相应功能; - void CGkbc8Dlg::OnFolder() //浏览文件夹
- {
- BROWSEINFO bi;
- char buffer[MAX_PATH];
- ZeroMemory(buffer,MAX_PATH);
- bi.hwndOwner=GetSafeHwnd();
- bi.pidlRoot=NULL;
- bi.pszDisplayName=buffer;
- bi.lpszTitle="选择一个文件夹";
- bi.ulFlags=BIF_EDITBOX;
- bi.lpfn=NULL;
- bi.lParam=0;
- bi.iImage=0;
- LPITEMIDLIST pList=NULL;
- if((pList=SHBrowseForFolder(&bi))!=NULL)
- {
- char path[MAX_PATH];
- ZeroMemory(path,MAX_PATH);
- SHGetPathFromIDList(pList,path);
复制代码- m_sFoderPath = path; SHFILEINFO shfile; strcat(path,"\"); ::SHGetFileInfo(path,0,&shfile,sizeof(shfile),SHGFI_ICON);
- CStatic*pStatic = (CStatic*)GetDlgItem(IDC_FOLDERICON); pStatic->SetIcon(shfile.hIcon);
- }
- }
- void CGkbc8Dlg::OnChooseicon() //选择图标
- {
- CFileDialog Dlg( TRUE,"*.ICO",NULL,NULL,"图标文件(*.ICO)|*.ICO||");
- if(Dlg.DoModal()==IDOK)
- {
- m_sIconPath = Dlg.GetPathName();
- m_sIconName = Dlg.GetFileName();
-
- HICON hIcon;
- hIcon=ExtractIcon(AfxGetInstanceHandle(),m_sIconPath,0);
- CStatic*pStatic = (CStatic*)GetDlgItem(IDC_EXCHANGEICON);
- pStatic->SetIcon(hIcon);
- }
- }
- void CGkbc8Dlg::OnExchange() //执行更改文件夹图标
- {
- CString sIconNewPath,sINIPath;
- sIconNewPath = m_sFoderPath;
- sIconNewPath += '\\';
- sIconNewPath += m_sIconName;
- sINIPath = m_sFoderPath+"\\Desktop.ini";
- CopyFile(m_sIconPath,sIconNewPath,FALSE);//复制图标到目标文件夹
- ::WritePrivateProfileString(".ShellClassInfo","IconFile",m_sIconName,sINIPath);
- // ::WritePrivateProfileString(".ShellClassInfo","IconFile",sIconNewPath,sINIPath);//或使用此行
- ::WritePrivateProfileString(".ShellClassInfo","IconIndex","0",sINIPath);
- SetFileAttributes(sIconNewPath,FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM);
- SetFileAttributes(sINIPath,FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM);
- }
复制代码我们来演示下功能实现的整个过程
|