203上位机VC MFC设置桌面背景图删除快捷图标
203上位机VC MFC设置桌面背景图删除快捷图标 功能展示 桌面的背景图可以通过鼠标进行设置也可以通过我们自己编写代码实现,我们当前例程实现将选定文件夹内的图片随机循环的设置为桌面背景图,同时也实现删除桌面快捷图标与清空回收站功能,效果如图; 要点提示 桌面背景图片的设置可以用函数SystemParametersInfo()来实现; SystemParametersInfo函数原型: BOOL SystemParametersinfo(UINTuiAction,UINT uiParam,PVOID pvParam,UINTfWinlni); 参数编辑 1.uiAction:该参数指定要查询或设置的系统级参数。其取值众多可查询MSDN,我们当前例程使用SPI_SETDESKWALLPAPER:设置桌面壁纸。pvParam参数必须指向一个包含位图文件名,并且以NULL(空)结束的字符串。 2.uiParam:uiParam 在参数说明中所有为ulParam均为错误。 3.pvParam:与查询或设置的系统参数有关。关于系统级参数的详情,请参考uiAction参数。否则在没有指明情况下,必须将该参数指定为NULL。 4.fWinlni:如果设置系统参数,则它用来指定是否更新用户配置文件(Profile)。亦或是否要将WM_SETTINGCHANGE消息广播给所有顶层窗口,以通知它们新的变化内容。该参数可以是0或下列取值之一: SPIF_UPDATEINIFILE:把新的系统参数的设置内容写入用户配置文件。 SPIF_SENDCHANGE:在更新用户配置文件之后广播WM_SETTINGCHANGE消息。 SPI_SENDWININICHANGE与 SPIF_SENDCHANGE一样。 返回值:如果函数调用成功,返回值非零:如果函数调用失败,那么返回值为零。若想获取更多错误信息,请调用GetLastError函数。 实现功能 1.新建基于对话框的应用程序 2.拖拽一列表框ID为IDC_LIST1,用于罗列出选择文件夹内的图片,这些图片将用于随机设置桌面背景图片;依次添加按钮<设置桌面背景图><删除桌面快捷图标><清空回收站>给这三按钮关联函数,实现相应功能,再添加定时器消息响应函数,四个函数代码为: - void CGkbc8Dlg::OnSetbgimage()
- {
- CString sPath;//文件路径
- char buf[MAX_PATH];
- BROWSEINFO bi;
- ZeroMemory(&bi,sizeof(BROWSEINFO));
- bi.hwndOwner=this->m_hWnd;
- bi.lpszTitle="选择图片文件夹";
- bi.pszDisplayName=buf;
- bi.ulFlags=BIF_EDITBOX ;
- LPCITEMIDLIST idl;
- idl=SHBrowseForFolder(&bi);
- if(idl!=NULL)
- {
- CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST1);//列表框指针获取
- pListBox->ResetContent();//清空;
- SHGetPathFromIDList(idl,buf);
- sPath=buf;
- sPath+="\\*.*";//查找指定文件夹下全部文件;
- CFileFind FileFind;
- BOOL bFind = FileFind.FindFile(sPath);
-
复制代码- while(bFind)
- {
- bFind = FileFind.FindNextFile();
- sPath=FileFind.GetFilePath();
- if(sPath.Right(3)=="jpg" || sPath.Right(3)=="bmp")//找到文件的后缀jpg 或bmp时添加到列表框
- pListBox->InsertString(0,sPath);
- }
- }
- SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, sPath.GetBuffer(0), SPIF_UPDATEINIFILE);//设置桌面背景图
- SetTimer(1,3000,NULL);//3秒换桌面背景图
- }
- void CGkbc8Dlg::OnEmptyrecyclebin()
- {
- if(S_OK !=SHEmptyRecycleBin(NULL, NULL,SHERB_NOCONFIRMATION | SHERB_NOPROGRESSUI | SHERB_NOSOUND))
- MessageBox("清空回收站失败","信息提示",MB_OK);
- }
- void CGkbc8Dlg::OnTimer(UINT nIDEvent)
- {
- if(1==nIDEvent)
- {
- CListBox* pListBox = (CListBox*)GetDlgItem(IDC_LIST1);//列表框指针获取
- int nCount = pListBox->GetCount();//获取框总行数
-
- srand((unsigned)time( NULL ));
- nCount=rand()%nCount;//0---nCount
- CString sPath;//图片路径
- pListBox->GetText(nCount,sPath);
- SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, sPath.GetBuffer(0), SPIF_UPDATEINIFILE);//设置桌面背景图
- }
- CDialog::OnTimer(nIDEvent);
- }
复制代码我们来演示下功能实现的整个过程
|