C++ 生成桌面的问题 20

用IActiveDesktop接口生成桌面,第一次可以成功,第二次之后之前生成为桌面的图片文件无法删除和覆盖。这个是什么问题。BOOLCTDDesktopCalendar... 用IActiveDesktop接口生成桌面,第一次可以成功,第二次之后之前生成为桌面的图片文件无法删除和覆盖。这个是什么问题。
BOOL CTDDesktopCalendar::SetMyWallpaper(CString strPicFile, DWORD dwStyle)
{
IActiveDesktop *pActiveDesktop;

HRESULT hr;
CoInitialize(NULL);

hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
IID_IActiveDesktop, (void**)&pActiveDesktop);

COMPONENTSOPT comps;
comps.dwSize = sizeof comps;
comps.fEnableComponents = TRUE;
comps.fActiveDesktop = TRUE;

pActiveDesktop->SetDesktopItemOptions(&comps,0);
//下面是使用固定path的文件的方法
if (FAILED(pActiveDesktop->SetWallpaper(strPicFile,dwStyle)))
return false;

pActiveDesktop->ApplyChanges(AD_APPLY_ALL|AD_APPLY_FORCE);

pActiveDesktop->Release();
CoUninitialize();

return TRUE;
}
……
void CTDDesktopCalendar::SaveSelectBmp(void)
{
CDC dcSave;
dcSave.CreateCompatibleDC(NULL);
CBitmap bitmap;
BITMAP bm;
m_bmpScreen.GetObject(sizeof(bm), &bm);
bm.bmWidth = m_size.cx;
bm.bmHeight = m_size.cy;
bitmap.CreateBitmapIndirect(&bm);
CBitmap* pOldBmp = dcSave.SelectObject(&bitmap);
DrawDesktop();
DrawScreenShape(&m_dcMem);

dcSave.StretchBlt(0,0, m_size.cx, m_size.cy,
&m_dcMem,0, 0,m_size.cx, m_size.cy, SRCCOPY);

HBITMAP hBmp = (HBITMAP)bitmap.Detach();
dcSave.SelectObject(pOldBmp);

PBITMAPINFO pbmp;
if(!CTDUtility::CreateBitmapInfoStruct(hBmp, pbmp))
{
return;
}
CTime time;
time=CTime::GetCurrentTime();
CString strTime=time.Format("%H%M%S");
::DeleteFile(_T("\\desktop.bmp"));
CString strBmpFile=CTDUtility::GetModuleFileDir()+_T("desktop.bmp");
if(CTDUtility::CreateBMPFile(strBmpFile.GetBuffer(strBmpFile.GetLength()), pbmp, hBmp, GetDC()->GetSafeHdc()))
{
//AfxMessageBox("Save image file successfully!");
SetMyWallpaper(strBmpFile,WPSTYLE_CENTER);
}
}
展开
 我来答
whq272829
2011-04-02 · TA获得超过3.4万个赞
知道大有可为答主
回答量:2.6万
采纳率:18%
帮助的人:7081万
展开全部
出现这个问题的原因

1.文件正在被使用的状态,
文件被占用,删除就会失败。需要关闭或退出正在使用该文件的程序,再删除就可以了。
2.如果采用NTFS文件系统,当前用户不具备目标文件的完全控制权限时,删除就会失败。
3.文件存储出问题,删除也会失败。
比如U盘损坏,我们可以在资源管理器中看到这个文件,却不能删除文件。
4.文件被病毒感染(这种情况最多,用户可以使用诸如金山毒霸等杀毒软件清理系统病毒就ok)。
赫塔缪勒2号
2011-04-02 · TA获得超过490个赞
知道小有建树答主
回答量:502
采纳率:27%
帮助的人:103万
展开全部
代码问题最好把提示弄出来,你这个用mfc我看不太懂!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
行走的标本
2011-04-02 · TA获得超过179个赞
知道答主
回答量:168
采纳率:0%
帮助的人:143万
展开全部
打开文件流的时候用w+b
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式