1. STDAFX can be joined in #i nclude
#I nclude
2. Add #i nClude
3. The IACTIVEDESKTOP interface can only be applied when installing IE4.0 and above, only Active Desktop can apply the setwallpaper function in the case, so the way to turn the active desktop is as follows:
BOOL EnableActiveDesktop (Bool Benable)
{
// Benable is turned on, reverse
HRESULT HR;
IactiveDesktop * piadesk;
// Create an instance of an interface
HR = COCREATEINSTANCE (CLSID_ACTIVEDESKTOP, NULL, CLSCTX_INPROC_SERVER,
IID_IACTIVEDESKTOP, (void **) & piadesk;
IF (! Succeeded (hr))
Return False;
Componentsopt Comp;
Comp.dwsize = sizeof (comp);
Comp.FenableComponents = BENABLE;
// Enable or close Active Desktop
Comp.FactiveDesktop = BENABLE;
HR = PIADESK -> SetDesktopItemOptions (& Comp, 0);
IF (! succeeded (hr))
Return False;
/ / Release the instance of the interface
PIADESK -> RELEASE
Return True;
}
4. Wallpaper settings can be made when the event desktop is turned on, the code is as follows:
// strpicfile is an image file name, supports formats such as BMP JPEG GIF
// dWStyle is the style of wallpaper
// WPStyle_center home 0
// WPStyle_tile Tile 1
// wpStyle_stretch stretch 2
// WPStyle_max 3
// The return value is True, the wallpaper is set success, and it failed when returning FALSE.
Bool Setwallpaper (CString & Strpicfile, DWORD DWSTYLE)
{
HRESULT HR;
IactiveDesktop * piad;
// Create an instance of an interface
HR = COCREATEINSTANCE (CLSID_ACTIVEDESKTOP, NULL, CLSCTX_INPROC_SERVER,
IID_IACTIVEDESKTOP, (void **) & piad);
IF (! Succeeded (hr))
Return False;
// change the file name to a wide string, this is the requirements of IactiveDesktop :: SetWallpaper
Wchar wszwallpaper [max_path];
LPTSTR LPSTR = strpicfile.getBuffer (STRPICFILE.GETLENGTH ());
MultibyToWideChar (CP_ACP, 0, LPSTR, -1, WSZWALLPAPER, MAX_PATH);
Strpicfile.releasebuffer ();
// Set wallpaper
HR = PIAD-> SetWallpaper (WSZWALLPAPER, 0);
IF (! succeeded (hr)) Return False; // Set the style of wallpaper
Wallpaperopt WPO;
WPO.DWSIZE = SIZEOF (WPO);
WPO.DWSTYLE = DWStyle;
HR = Piad-> SetWallPaperOptions (& WPO, 0);
IF (! succeeded (hr))
Return False;
// Application wallpaper settings
HR = PIAD-> ApplyChanges (ad_apply_all);
IF (! succeeded (hr))
Return False;
/ / Read the file name of the wallpaper and print within the Debug window
HR = Piad-> getWallpaper (Wszwallpaper, Max_Path, 0);
CString strfile = wszwallpaper;
Trace (strfile);
Piad-> Release ();
Return True;
}