遇到一个问题,在visual c++中如何设置桌面背景为web页面?

解决方案 »

  1.   

    IActiveDesktop* pAD;
    COMPONENTSOPT opt;HRESULT hr = ::CoCreateInstance(
        CLSID_ActiveDesktop,
        NULL, 
        CLSCTX_INPROC_SERVER,
        IID_IActiveDesktop,
        (void**)&pAD);opt.dwSize = sizeof(opt);
    opt.fActiveDesktop = 
        opt.fEnableComponents = TRUE;
    hr = pAD->SetDesktopItemOptions(&opt,0);
      

  2.   

    哦~~还要
    hr = pAD->ApplyChanges(AD_APPLY_REFRESH);
      

  3.   

    可以使用IActiveDesktop.
    MSDN: IActiveDesktop Interface
    Allows a client program to manage the desktop items and wallpaper on a local computer.这儿有个封装好的。
    #pragma once#include <shlguid.h>
    #include <shlobj.h> // IActiveDesktop
    #include <atlbase.h> // ATL stuff//////////////////
    // Handy class to manipulate the active desktop
    //
    class CActiveDesktop {
    protected:
    // ptr to IActiveDesktop interface
    CComQIPtr<IActiveDesktop> m_pIActiveDesktop;public:
    // ctor: get interface ptr to IActiveDesktop
    CActiveDesktop() {
    HRESULT hr = m_pIActiveDesktop.CoCreateInstance(CLSID_ActiveDesktop,
    NULL, CLSCTX_INPROC_SERVER);
    // If this bombs, you most likely forgot to call call CoInitialize
    ASSERT(SUCCEEDED(hr));
    } // Determine if Active Desktop is enabled. Could also use SHGetSettings
    //
    BOOL IsEnabled() {
    ASSERT(m_pIActiveDesktop);
    COMPONENTSOPT opt;
    opt.dwSize = sizeof(opt);
    HRESULT hr = m_pIActiveDesktop->GetDesktopItemOptions(&opt,0);
    ASSERT(SUCCEEDED(hr));
    return opt.fActiveDesktop;
    }

    // Enable/disable Active Desktop. Calls IActiveDesktop.
    //
    void Enable(BOOL bEnable) {
    ASSERT(m_pIActiveDesktop);
    COMPONENTSOPT opt;
    opt.dwSize = sizeof(opt);
    HRESULT hr = m_pIActiveDesktop->GetDesktopItemOptions(&opt,0);
    ASSERT(SUCCEEDED(hr));
    opt.fActiveDesktop = bEnable;
    hr = m_pIActiveDesktop->SetDesktopItemOptions(&opt,0);
    ASSERT(SUCCEEDED(hr));
    ApplyChanges(AD_APPLY_REFRESH);
    } // Apply the changes
    //
    void ApplyChanges(DWORD dwFlags) {
    ASSERT(m_pIActiveDesktop);
    HRESULT hr = m_pIActiveDesktop->ApplyChanges(dwFlags);
    ASSERT(SUCCEEDED(hr));
    };};这样用就行了。
    void CMainFrame::OnActiveDesktop()
    {
    CActiveDesktop ad;
    ad.Enable(!ad.IsEnabled());
    }void CMainFrame::OnUpdateActiveDesktop(CCmdUI* pCmdUI)
    {
    CActiveDesktop ad;
    pCmdUI->SetText(ad.IsEnabled() ? _T("Disable &Active Desktop")
    : _T("Enable &Active Desktop"));
    }