问题如下:1 如何设置桌面背景为web页面 2 如何设置桌面背景为“无” 3 怎样实现设置好了马上生效

解决方案 »

  1.   

    用IActiveDesktop接口应该可以解决你所说的问题:
    http://www.xiaozhou.net/ReadNews.asp?NewsID=851
    http://www.vckbase.com/document/viewdoc/?id=218
      

  2.   

    谢谢你
    还有个问题 AfxOleInit();用了以后 怎么释放?
      

  3.   

    在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>之间即可
      

  4.   

    不需要自己释放,COM和MFC会自动处理。
    AfxOleInit会设置相关线程的pThread->m_lpfnOleTermOrFreeLib = AfxOleTermOrFreeLib;然后在多处不同地方MFC会调用此函数指针来调用AfxOleTermOrFreeLib函数来进行释放。