Se vuoi impostare un'immagine jpg le cose si fanno più complicate: devi interfacciarti con ActiveDesktop (che, essendo un oggetto COM, può essere maneggiato comodamente con il C++ ma non con il C):
codice:
#include <shlobj.h>
//...
HRESULT hr;
IActiveDesktop *pActiveDesktop;

//Crea un'istanza dell'oggetto Active Desktop
hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
                      IID_IActiveDesktop, (void**)&pActiveDesktop);
if(hr!=S_OK)
{
    //Notifica l'errore in qualche maniera
}
//Imposta lo sfondo
hr = pActiveDesktop->SetWallpaper("x:\percorso\immagine.jpg", 0);
if(hr!=S_OK)
{
    //Idem
}
//Imposta le opzioni (sfondo ingrandito/affiancato/centrato)
WALLPAPEROPT wpo;
wpo.dwSize=sizeof(wpo);
wpo.dwStyle=WPSTYLE_STRETCH; //oppure WPSTYLE_CENTER/WPSTYLE_TILE/WPSTYLE_MAX
hr = pActiveDesktop->SetWallpaperOptions(&wpo, 0);
if(hr!=S_OK)
{
    //Idem
}
//Rilascia l'oggetto ActiveDesktop
pActiveDesktop->Release();
.