void CMainWindow::ProcessFileMenu(HMENU hPopupMenu)
{
- LPCWSTR dotext = PathFindExtensionW(g_szFileName);
- BOOL isBMP = FALSE;
- if (_wcsicmp(dotext, L".bmp") == 0 ||
- _wcsicmp(dotext, L".dib") == 0 ||
- _wcsicmp(dotext, L".rle") == 0)
- {
- isBMP = TRUE;
- }
-
- UINT uWallpaperEnabled = ENABLED_IF(g_isAFile && isBMP && g_fileSize > 0);
- ::EnableMenuItem(hPopupMenu, IDM_FILEASWALLPAPERPLANE, uWallpaperEnabled);
- ::EnableMenuItem(hPopupMenu, IDM_FILEASWALLPAPERCENTERED, uWallpaperEnabled);
- ::EnableMenuItem(hPopupMenu, IDM_FILEASWALLPAPERSTRETCHED, uWallpaperEnabled);
-
for (INT iItem = 0; iItem < MAX_RECENT_FILES; ++iItem)
RemoveMenu(hPopupMenu, IDM_FILE1 + iItem, MF_BYCOMMAND);
void RegistrySettings::SetWallpaper(LPCWSTR szFileName, RegistrySettings::WallpaperStyle style)
{
+ // Build the local path to the converted cached BMP wallpaper
+ HRESULT hr;
+ WCHAR szWallpaper[MAX_PATH];
+ hr = SHGetFolderPathW(NULL, CSIDL_LOCAL_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, szWallpaper);
+ if (FAILED(hr))
+ return;
+ hr = StringCchCatW(szWallpaper, _countof(szWallpaper), TEXT("\\Wallpaper1.bmp"));
+ if (FAILED(hr))
+ return;
+
+ // Save the converted wallpaper BMP
+ CImageDx img;
+ HBITMAP hbmLocked = imageModel.LockBitmap();
+ img.Attach(hbmLocked);
+ hr = img.SaveDx(szWallpaper);
+ img.Detach();
+ imageModel.UnlockBitmap(hbmLocked);
+ if (FAILED(hr))
+ return;
+
+ // Write the wallpaper settings to the registry
CRegKey desktop;
if (desktop.Open(HKEY_CURRENT_USER, L"Control Panel\\Desktop") == ERROR_SUCCESS)
{
desktop.SetStringValue(L"Wallpaper", szFileName);
-
desktop.SetStringValue(L"WallpaperStyle", (style == RegistrySettings::STRETCHED) ? L"2" : L"0");
desktop.SetStringValue(L"TileWallpaper", (style == RegistrySettings::TILED) ? L"1" : L"0");
+ desktop.SetStringValue(L"ConvertedWallpaper", szWallpaper);
+ desktop.SetStringValue(L"OriginalWallpaper", szFileName);
}
- SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID) szFileName, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
+ // Set the desktop wallpaper
+ SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, szWallpaper, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
}
void RegistrySettings::LoadPresets(INT nCmdShow)