改变并更新桌面背景 问题如下:1 如何设置桌面背景为web页面 2 如何设置桌面背景为“无” 3 怎样实现设置好了马上生效 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用IActiveDesktop接口应该可以解决你所说的问题:http://www.xiaozhou.net/ReadNews.asp?NewsID=851http://www.vckbase.com/document/viewdoc/?id=218 谢谢你还有个问题 AfxOleInit();用了以后 怎么释放? 在desktopDlg.cpp中加入#include <shlobj.h>BOOL SetWallpaper(CString &strPicFile){ CoInitialize(NULL); HRESULT hr; IActiveDesktop* pIAD; hr = CoCreateInstance ( CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,IID_IActiveDesktop, (void**) &pIAD ); if(! SUCCEEDED(hr)) return FALSE; WCHAR wszWallpaper [MAX_PATH]; LPTSTR lpStr = strPicFile.GetBuffer (strPicFile.GetLength() ); MultiByteToWideChar(CP_ACP, 0, lpStr, -1, wszWallpaper, MAX_PATH); strPicFile.ReleaseBuffer (); hr = pIAD->SetWallpaper (wszWallpaper, 0); if(!SUCCEEDED(hr)) return FALSE; WALLPAPEROPT wpo; wpo.dwSize = sizeof(wpo); wpo.dwStyle = WPSTYLE_STRETCH; hr = pIAD->SetWallpaperOptions(&wpo, 0); if(!SUCCEEDED(hr)) return FALSE; hr = pIAD->ApplyChanges(AD_APPLY_ALL); if(!SUCCEEDED(hr)) return FALSE; hr = pIAD->GetWallpaper(wszWallpaper, MAX_PATH, 0); CString strFile = wszWallpaper; TRACE(strFile); pIAD->Release(); return TRUE;}void CDesktopDlg::OnDestroy() { CDialog::OnDestroy(); CoUninitialize();}void CDesktopDlg::OnOK() { //此串为空 即将背景设为无 CString szDir="C:\\WINDOWS\\WEB\\WALLPAPER\\1.htm"; if(TRUE==SetWallpaper(szDir)) { MessageBox("成功"); CDialog::OnOK(); } else MessageBox("失败");}再将#include <wininet.h>放入StdAfx.h中#include <afxwin.h>与#include <afxdisp.h>之间即可 不需要自己释放,COM和MFC会自动处理。AfxOleInit会设置相关线程的pThread->m_lpfnOleTermOrFreeLib = AfxOleTermOrFreeLib;然后在多处不同地方MFC会调用此函数指针来调用AfxOleTermOrFreeLib函数来进行释放。 c++ 功力深的进啊 如何将一个控件(如CTabCtrl)停泊在CView里面的上方? 窗口还原的一个奇怪的现象?请教各位! 【求助】vc编程建立ssl链接的方法 怎样获得指定图形区域的指针? 如何获得一个象素点的颜色? 请教如何捕获声卡的输出音频,来进行录音 怎样在Csocket中使用串行化,能举个例子吗? Menu问题?不知您是否认为简单? 如何使用ftp的list命令? vc中如何使用水晶报表???急!!! 有没有办法得到局域网内所有工作组的计算机?
http://www.xiaozhou.net/ReadNews.asp?NewsID=851
http://www.vckbase.com/document/viewdoc/?id=218
还有个问题 AfxOleInit();用了以后 怎么释放?
#include <shlobj.h>
BOOL SetWallpaper(CString &strPicFile)
{
CoInitialize(NULL);
HRESULT hr;
IActiveDesktop* pIAD;
hr = CoCreateInstance ( CLSID_ActiveDesktop, NULL,
CLSCTX_INPROC_SERVER,IID_IActiveDesktop, (void**) &pIAD );
if(! SUCCEEDED(hr)) return FALSE;
WCHAR wszWallpaper [MAX_PATH];
LPTSTR lpStr = strPicFile.GetBuffer (strPicFile.GetLength() );
MultiByteToWideChar(CP_ACP, 0, lpStr, -1, wszWallpaper, MAX_PATH);
strPicFile.ReleaseBuffer ();
hr = pIAD->SetWallpaper (wszWallpaper, 0);
if(!SUCCEEDED(hr)) return FALSE;
WALLPAPEROPT wpo;
wpo.dwSize = sizeof(wpo);
wpo.dwStyle = WPSTYLE_STRETCH;
hr = pIAD->SetWallpaperOptions(&wpo, 0);
if(!SUCCEEDED(hr)) return FALSE;
hr = pIAD->ApplyChanges(AD_APPLY_ALL);
if(!SUCCEEDED(hr)) return FALSE;
hr = pIAD->GetWallpaper(wszWallpaper, MAX_PATH, 0);
CString strFile = wszWallpaper;
TRACE(strFile);
pIAD->Release();
return TRUE;
}
void CDesktopDlg::OnDestroy()
{
CDialog::OnDestroy();
CoUninitialize();
}
void CDesktopDlg::OnOK()
{
//此串为空 即将背景设为无
CString szDir="C:\\WINDOWS\\WEB\\WALLPAPER\\1.htm"; if(TRUE==SetWallpaper(szDir))
{
MessageBox("成功");
CDialog::OnOK();
}
else MessageBox("失败");
}
再将#include <wininet.h>放入StdAfx.h中#include <afxwin.h>与#include <afxdisp.h>之间即可
AfxOleInit会设置相关线程的pThread->m_lpfnOleTermOrFreeLib = AfxOleTermOrFreeLib;然后在多处不同地方MFC会调用此函数指针来调用AfxOleTermOrFreeLib函数来进行释放。