先将使用DELPHI将JPG转换成BMP图象
好象ACDSEE也是这么做的

解决方案 »

  1.   

    谢谢panxiaosen,我是在做一程序﹐想把程序中的图像用一个click动作变为桌面背景!OK!
      

  2.   

    对于jpg和Gif或Htm得启用Active Desktop.要使用com,建议到VC去查一下IActiveDesktop.我以前写过VC的,但没在Delphi中写过,如果你能够改成Delphi的不妨一试. IActiveDesktop * p;
    CoInitialize(NULL);
    HRESULT hr = CoCreateInstance(CLSID_ActiveDesktop,NULL,CLSCTX_ALL,IID_IActiveDesktop,(LPVOID *)&p);
    //WCHAR szPath[MAX_PATH+1];
    CHAR szWallpaperFile[MAX_PATH+1];
    sprintf(szWallpaperFile,"f:\\photo\\955.jpg");
    //sprintf(szWallpaperFile,"F:\\web\\default.htm");
    USES_CONVERSION;
    LPCWSTR x = A2W(szWallpaperFile);
        //sprintf(szWallpaperFile,x);
    //AfxMessageBox(szWallpaperFile);
    //szPath=A2W(szWallpaperFile);
    //szPath=(WCHAR *)szWallpaperFile;
    //sprintf(WCHAR,szWallpaperFile);
    COMPONENTSOPT co;
    co.dwSize =sizeof(co);
    //int m_count;
    hr=p->GetDesktopItemOptions(&co,0); 
    CString cs;
        /*
    hr=p->GetDesktopItemCount(&m_count,0); 
    cs.Format("The count is:%ld",m_count); 

    AfxMessageBox(cs);
    */
    if(SUCCEEDED(hr))
    {
    AfxMessageBox("ok to get op");
    co.fActiveDesktop =FALSE;
    //co.fEnableComponents  =FALSE;
    hr=p->SetDesktopItemOptions(&co,0);
    if(SUCCEEDED(hr))
    AfxMessageBox("set desk option OK");
    p->ApplyChanges(AD_APPLY_ALL);
    }
    if(SUCCEEDED(hr))
    {
    //hr = p->SetWallpaper(szPath,0);
    hr = p->SetWallpaper(x,0);
    if(SUCCEEDED(hr))
    {
    WALLPAPEROPT wpo;
    hr=p->GetWallpaperOptions((LPWALLPAPEROPT)&wpo,0);
    if(SUCCEEDED(hr))
    AfxMessageBox("OKKK");
    wpo.dwStyle= WPSTYLE_STRETCH;
    hr=p->SetWallpaperOptions(&wpo,0); 
    if(SUCCEEDED(hr))
    { AfxMessageBox("ok");
    }
      p->ApplyChanges(AD_APPLY_ALL); }
    p->Release();
    }
    CoUninitialize();

    //SystemParametersInfo(SPI_SETDESKWALLPAPER,0,"c:\\winnt\001.gif",SPIF_UPDATEINIFILE|SPIF_SENDWININICHANGE);

        //SystemParametersInfo(SPI_SETDESKWALLPAPER,0,szWallpaperFile,SPIF_UPDATEINIFILE|SPIF_SENDWININICHANGE);里面有些调试代码没去掉,谅。