Trevor McCort implemented desktop wallpaper changing
Modified: trunk/reactos/include/defines.h
Modified: trunk/reactos/lib/cpl/desk/Makefile
Added: trunk/reactos/lib/cpl/desk/appearance.c
Added: trunk/reactos/lib/cpl/desk/background.c
Modified: trunk/reactos/lib/cpl/desk/desk.c
Deleted: trunk/reactos/lib/cpl/desk/desk.dsp
Deleted: trunk/reactos/lib/cpl/desk/desk.dsw
Modified: trunk/reactos/lib/cpl/desk/desk.h
Modified: trunk/reactos/lib/cpl/desk/desk.rc
Added: trunk/reactos/lib/cpl/desk/dibitmap.c
Added: trunk/reactos/lib/cpl/desk/dibitmap.h
Added: trunk/reactos/lib/cpl/desk/en.rc
Modified: trunk/reactos/lib/cpl/desk/resource.h
Added: trunk/reactos/lib/cpl/desk/screensaver.c
Added: trunk/reactos/lib/cpl/desk/settings.c
_____
Modified: trunk/reactos/include/defines.h
--- trunk/reactos/include/defines.h 2005-02-04 16:51:11 UTC (rev
13405)
+++ trunk/reactos/include/defines.h 2005-02-04 20:39:10 UTC (rev
13406)
@@ -771,6 +771,7 @@
#define DS_SETFONT (0x40L)
#define DS_SETFOREGROUND (0x200L)
#define DS_SYSMODAL (0x2L)
+#define DS_SHELLFONT (DS_SETFONT | DS_FIXEDSYS)
/* CreateWindowEx */
#define WS_EX_ACCEPTFILES (0x10L)
_____
Modified: trunk/reactos/lib/cpl/desk/Makefile
--- trunk/reactos/lib/cpl/desk/Makefile 2005-02-04 16:51:11 UTC (rev
13405)
+++ trunk/reactos/lib/cpl/desk/Makefile 2005-02-04 20:39:10 UTC (rev
13406)
@@ -13,20 +13,20 @@
TARGET_BASE = $(TARGET_BASE_LIB_CPL_DESK)
TARGET_CFLAGS = \
- -I./include \
+ -I./include \
-D_WIN32_IE=0x0600 \
-D_WIN32_WINNT=0x0501 \
-D__USE_W32API \
-DUNICODE \
-D_UNICODE \
- -D__REACTOS__ \
+ -D__USE_W32API \
-Wall \
-Werror \
-fno-builtin
TARGET_LFLAGS = -nostartfiles
-TARGET_SDKLIBS = kernel32.a user32.a comctl32.a
+TARGET_SDKLIBS = kernel32.a user32.a comctl32.a comdlg32.a advapi32.a
gdi32.a
TARGET_GCCLIBS = gcc
@@ -34,7 +34,12 @@
TARGET_CLEAN =
-TARGET_OBJECTS = desk.o
+TARGET_OBJECTS = desk.o \
+ background.o \
+ screensaver.o \
+ appearance.o \
+ settings.o \
+ dibitmap.o
DEP_OBJECTS = $(TARGET_OBJECTS)
_____
Added: trunk/reactos/lib/cpl/desk/appearance.c
--- trunk/reactos/lib/cpl/desk/appearance.c 2005-02-04 16:51:11 UTC
(rev 13405)
+++ trunk/reactos/lib/cpl/desk/appearance.c 2005-02-04 20:39:10 UTC
(rev 13406)
@@ -0,0 +1,34 @@
+/* $Id$
+ *
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Display Control Panel
+ * FILE: lib/cpl/desk/appearance.c
+ * PURPOSE: Appearance property page
+ *
+ * PROGRAMMERS: Trevor McCort (lycan359(a)gmail.com)
+ */
+
+#include <windows.h>
+#include <commctrl.h>
+
+#include "resource.h"
+
+INT_PTR CALLBACK AppearancePageProc(HWND hwndDlg,
+ UINT uMsg,
+ WPARAM wParam,
+ LPARAM lParam)
+{
+ switch(uMsg)
+ {
+ case WM_INITDIALOG:
+ {
+ } break;
+
+ case WM_COMMAND:
+ {
+ } break;
+ }
+
+ return FALSE;
+}
+
Property changes on: trunk/reactos/lib/cpl/desk/appearance.c
___________________________________________________________________
Name: svn:keywords
+ author date id revision
Name: svn:eol-style
+ native
_____
Added: trunk/reactos/lib/cpl/desk/background.c
--- trunk/reactos/lib/cpl/desk/background.c 2005-02-04 16:51:11 UTC
(rev 13405)
+++ trunk/reactos/lib/cpl/desk/background.c 2005-02-04 20:39:10 UTC
(rev 13406)
@@ -0,0 +1,597 @@
+/* $Id$
+ *
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Display Control Panel
+ * FILE: lib/cpl/desk/background.c
+ * PURPOSE: Background property page
+ *
+ * PROGRAMMERS: Trevor McCort (lycan359(a)gmail.com)
+ */
+
+#include <windows.h>
+#include <commctrl.h>
+#include <commdlg.h>
+#include <cpl.h>
+#include <tchar.h>
+
+#include "resource.h"
+
+#include "desk.h"
+#include "dibitmap.h"
+
+#define MAX_WALLPAPERS 100
+
+#define PLACEMENT_CENTER 0
+#define PLACEMENT_STRETCH 1
+#define PLACEMENT_TILE 2
+
+DIBitmap *g_pWallpaperBitmap = NULL;
+
+int g_placementSelection = 0;
+int g_wallpaperSelection = -1;
+
+int g_wallpaperCount = 0;
+int g_listViewItemCount = 0;
+
+int g_currentWallpaperItemId = 0;
+
+HWND g_hBackgroundTab = NULL;
+
+HWND g_hWallpaperList = NULL;
+HWND g_hWallpaperPreview = NULL;
+HIMAGELIST g_hShellImageList = NULL;
+
+HWND g_hPlacementCombo = NULL;
+
+TCHAR g_wallpapers[MAX_WALLPAPERS][MAX_PATH];
+
+/* Add the bitmaps in the C:\ReactOS directory and the current
wallpaper if any */
+void AddListViewItems()
+{
+ WIN32_FIND_DATA fd;
+ HANDLE hFind;
+ TCHAR szBuffer[256];
+ TCHAR szSearchPath[MAX_PATH];
+ LV_ITEM listItem;
+ LV_COLUMN dummy;
+ RECT clientRect;
+ HKEY regKey;
+ SHFILEINFO sfi;
+ HIMAGELIST himl;
+ TCHAR wallpaperFilename[MAX_PATH];
+ DWORD bufferSize = sizeof(wallpaperFilename);
+ DWORD varType = REG_SZ;
+ LONG result;
+ UINT i = 0;
+
+ GetClientRect(g_hWallpaperList, &clientRect);
+
+ ZeroMemory(&dummy, sizeof(LV_COLUMN));
+ dummy.mask = LVCF_SUBITEM | LVCF_WIDTH;
+ dummy.iSubItem = 0;
+ dummy.cx = (clientRect.right - clientRect.left) -
GetSystemMetrics(SM_CXVSCROLL);
+
+ ListView_InsertColumn(g_hWallpaperList, 0, &dummy);
+
+ /* Add the "None" item */
+
+ LoadString(hApplet, IDS_NONE, szBuffer, sizeof(szBuffer) /
sizeof(TCHAR));
+
+ ZeroMemory(&listItem, sizeof(LV_ITEM));
+ listItem.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE |
LVIF_IMAGE;
+ listItem.pszText = szBuffer;
+ listItem.iItem = g_listViewItemCount;
+ listItem.iImage = -1;
+ listItem.state = LVIS_SELECTED;
+ listItem.lParam = -1;
+
+ ListView_InsertItem(g_hWallpaperList, &listItem);
+ ListView_SetItemState(g_hWallpaperList, g_listViewItemCount,
LVIS_SELECTED, LVIS_SELECTED);
+
+ g_listViewItemCount++;
+
+ /* Add current wallpaper if any */
+
+ RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Control Panel\\Desktop"), 0,
KEY_ALL_ACCESS, ®Key);
+
+ result = RegQueryValueEx(regKey, TEXT("Wallpaper"), 0, &varType,
(LPBYTE)wallpaperFilename, &bufferSize);
+
+ if((result == ERROR_SUCCESS) && (_tcslen(wallpaperFilename) > 0))
+ {
+ himl = (HIMAGELIST)SHGetFileInfo(wallpaperFilename,
+ 0,
+ &sfi,
+ sizeof(sfi),
+ SHGFI_SYSICONINDEX |
SHGFI_SMALLICON |
+ SHGFI_DISPLAYNAME);
+
+ if(himl != NULL)
+ {
+ if(i++ == 0)
+ {
+ g_hShellImageList = himl;
+ ListView_SetImageList(g_hWallpaperList, himl,
LVSIL_SMALL);
+ }
+
+ ZeroMemory(&listItem, sizeof(LV_ITEM));
+ listItem.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE |
LVIF_IMAGE;
+ listItem.pszText = sfi.szDisplayName;
+ listItem.state = LVIS_SELECTED;
+ listItem.iItem = g_listViewItemCount;
+ listItem.iImage = sfi.iIcon;
+ listItem.lParam = g_wallpaperCount;
+
+ ListView_InsertItem(g_hWallpaperList, &listItem);
+ _tcscpy(g_wallpapers[g_wallpaperCount], wallpaperFilename);
+
+ ListView_SetItemState(g_hWallpaperList,
g_listViewItemCount, LVIS_SELECTED, LVIS_SELECTED);
+
+ g_currentWallpaperItemId = g_listViewItemCount;
+
+ g_listViewItemCount++;
+ g_wallpaperCount++;
+ }
+ }
+
+ RegCloseKey(regKey);
+
+ /* Add all the bitmaps in the C:\ReactOS directory. */
+
+ GetWindowsDirectory(szSearchPath, MAX_PATH);
+ _tcscat(szSearchPath, TEXT("\\*.bmp"));
+
+ hFind = FindFirstFile(szSearchPath, &fd);
+ while(hFind != INVALID_HANDLE_VALUE)
+ {
+ /* Don't add any hidden bitmaps */
+ if((fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) == 0)
+ {
+ TCHAR filename[MAX_PATH];
+
+ GetWindowsDirectory(filename, MAX_PATH);
+
+ _tcscat(filename, TEXT("\\"));
+ _tcscat(filename, fd.cFileName);
+
+ himl = (HIMAGELIST)SHGetFileInfo(filename,
+ 0,
+ &sfi,
+ sizeof(sfi),
+ SHGFI_SYSICONINDEX |
SHGFI_SMALLICON |
+ SHGFI_DISPLAYNAME);
+
+ if(himl == NULL)
+ {
+ break;
+ }
+
+ if(i++ == 0)
+ {
+ g_hShellImageList = himl;
+ ListView_SetImageList(g_hWallpaperList, himl,
LVSIL_SMALL);
+ }
+
+ ZeroMemory(&listItem, sizeof(LV_ITEM));
+ listItem.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE |
LVIF_IMAGE;
+ listItem.pszText = sfi.szDisplayName;
+ listItem.state = 0;
+ listItem.iItem = g_listViewItemCount++;
+ listItem.iImage = sfi.iIcon;
+ listItem.lParam = g_wallpaperCount;
+
+ ListView_InsertItem(g_hWallpaperList, &listItem);
+
+ _tcscpy(g_wallpapers[g_wallpaperCount], filename);
+
+ g_wallpaperCount++;
+ }
+
+ if(!FindNextFile(hFind, &fd))
+ hFind = INVALID_HANDLE_VALUE;
+ }
+}
+
+void InitBackgroundDialog()
+{
+ g_hWallpaperList = GetDlgItem(g_hBackgroundTab,
IDC_WALLPAPER_LIST);
+ g_hWallpaperPreview = GetDlgItem(g_hBackgroundTab,
IDC_WALLPAPER_PREVIEW);
+ g_hPlacementCombo = GetDlgItem(g_hBackgroundTab,
IDC_PLACEMENT_COMBO);
+
+ AddListViewItems();
+
+ TCHAR szString[256];
+
+ LoadString(hApplet, IDS_CENTER, szString, sizeof(szString) /
sizeof(TCHAR));
+ SendMessage(g_hPlacementCombo, CB_INSERTSTRING, PLACEMENT_CENTER,
(LPARAM)szString);
+
+ LoadString(hApplet, IDS_STRETCH, szString, sizeof(szString) /
sizeof(TCHAR));
+ SendMessage(g_hPlacementCombo, CB_INSERTSTRING, PLACEMENT_STRETCH,
(LPARAM)szString);
+
+ LoadString(hApplet, IDS_TILE, szString, sizeof(szString) /
sizeof(TCHAR));
+ SendMessage(g_hPlacementCombo, CB_INSERTSTRING, PLACEMENT_TILE,
(LPARAM)szString);
+
+ /* Load the default settings from the registry */
+ HKEY regKey;
+
+ TCHAR szBuffer[2];
+ DWORD bufferSize = sizeof(szBuffer);
+ DWORD varType = REG_SZ;
+ LONG result;
+
+ RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Control Panel\\Desktop"), 0,
KEY_ALL_ACCESS, ®Key);
+
+ result = RegQueryValueEx(regKey, TEXT("WallpaperStyle"), 0,
&varType, (LPBYTE)szBuffer, &bufferSize);
+
+ if(result == ERROR_SUCCESS)
+ {
+ if(_ttoi(szBuffer) == 0)
+ {
+ SendMessage(g_hPlacementCombo, CB_SETCURSEL,
PLACEMENT_CENTER, 0);
+ g_placementSelection = PLACEMENT_CENTER;
+ }
+
+ if(_ttoi(szBuffer) == 2)
+ {
+ SendMessage(g_hPlacementCombo, CB_SETCURSEL,
PLACEMENT_STRETCH, 0);
+ g_placementSelection = PLACEMENT_STRETCH;
+ }
+ }
+ else
+ {
+ SendMessage(g_hPlacementCombo, CB_SETCURSEL, PLACEMENT_CENTER,
0);
+ g_placementSelection = PLACEMENT_CENTER;
+ }
+
+ result = RegQueryValueEx(regKey, TEXT("TileWallpaper"), 0,
&varType, (LPBYTE)szBuffer, &bufferSize);
+
+ if(result == ERROR_SUCCESS)
+ {
+ if(_ttoi(szBuffer) == 1)
+ {
+ SendMessage(g_hPlacementCombo, CB_SETCURSEL,
PLACEMENT_TILE, 0);
+ g_placementSelection = PLACEMENT_TILE;
+ }
+ }
+
+ RegCloseKey(regKey);
+}
+
+void OnPatternButton()
+{
+ MessageBox(NULL, TEXT("That button doesn't do anything yet"),
TEXT("Whoops"), MB_OK);
+}
+
+BOOL CheckListBoxFilename(HWND list, TCHAR *filename)
+{
+ return FALSE;
+}
+
+void OnBrowseButton()
+{
+ OPENFILENAME ofn;
+ TCHAR filename[MAX_PATH];
+ TCHAR fileTitle[256];
+
+ ZeroMemory(&ofn, sizeof(OPENFILENAME));
+
+ ofn.lStructSize = sizeof(OPENFILENAME);
+ ofn.hwndOwner = g_hBackgroundTab;
+ ofn.lpstrFile = filename;
+
+ /* Set lpstrFile[0] to '\0' so that GetOpenFileName does not
+ * use the contents of szFile to initialize itself */
+ ofn.lpstrFile[0] = TEXT('\0');
+ ofn.nMaxFile = MAX_PATH;
+ ofn.lpstrFilter = TEXT("Bitmap Files (*.bmp)\0*.bmp\0");
+ ofn.nFilterIndex = 0;
+ ofn.lpstrFileTitle = fileTitle;
+ ofn.nMaxFileTitle = 256;
+ ofn.lpstrInitialDir = NULL;
+ ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
+
+ if(GetOpenFileName(&ofn) == TRUE)
+ {
+ /* Check if there is already a entry that holds this filename
*/
+ if(CheckListBoxFilename(g_hWallpaperList, filename) == FALSE)
+ {
+ SHFILEINFO sfi;
+ LV_ITEM listItem;
+
+ if(g_wallpaperCount > (MAX_WALLPAPERS - 1))
+ return;
+
+ _tcscpy(g_wallpapers[g_wallpaperCount], filename);
+
+ SHGetFileInfo(filename,
+ 0,
+ &sfi,
+ sizeof(sfi),
+ SHGFI_SYSICONINDEX | SHGFI_SMALLICON |
SHGFI_DISPLAYNAME);
+
+ ZeroMemory(&listItem, sizeof(LV_ITEM));
+ listItem.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE |
LVIF_IMAGE;
+ listItem.pszText = sfi.szDisplayName;
+ listItem.state = 0;
+ listItem.iItem = g_listViewItemCount++;
+ listItem.iImage = sfi.iIcon;
+ listItem.lParam = g_wallpaperCount;
+
+ ListView_InsertItem(g_hWallpaperList, &listItem);
+
+ g_wallpaperCount++;
+ }
+ }
+}
+
+void ListViewItemChanged(int itemIndex)
+{
+ if(g_pWallpaperBitmap != NULL)
+ {
+ DibFreeImage(g_pWallpaperBitmap);
+ g_pWallpaperBitmap = NULL;
+ }
+
+ LV_ITEM listItem;
+
+ listItem.iItem = itemIndex;
+ listItem.mask = LVIF_PARAM;
+ ListView_GetItem(g_hWallpaperList, &listItem);
+
+ if(listItem.lParam == -1)
+ {
+ g_wallpaperSelection = -1;
+ InvalidateRect(g_hWallpaperPreview, NULL, TRUE);
+ }
+ else
+ {
+ g_wallpaperSelection = listItem.lParam;
+
+ g_pWallpaperBitmap =
DibLoadImage(g_wallpapers[g_wallpaperSelection]);
+
+ if(g_pWallpaperBitmap == NULL)
+ {
+ }
+
+ InvalidateRect(g_hWallpaperPreview, NULL, TRUE);
+ }
+
+ EnableWindow(g_hPlacementCombo, (listItem.lParam != -1 ? TRUE :
FALSE));
+
+ PropSheet_Changed(GetParent(g_hBackgroundTab), g_hBackgroundTab);
+}
+
+void DrawWallpaperPreview(LPDRAWITEMSTRUCT draw)
+{
+ if(g_wallpaperSelection == -1)
+ {
+ FillRect(draw->hDC, &draw->rcItem,
GetSysColorBrush(COLOR_BACKGROUND));
+ return;
+ }
+
+ if(g_pWallpaperBitmap == NULL)
+ return;
+
+ float scaleX = ((float)GetSystemMetrics(SM_CXSCREEN) - 1) /
(float)draw->rcItem.right;
+ float scaleY = ((float)GetSystemMetrics(SM_CYSCREEN) - 1) /
(float)draw->rcItem.bottom;
+
+ int scaledWidth = g_pWallpaperBitmap->width / scaleX;
+ int scaledHeight = g_pWallpaperBitmap->height / scaleY;
+
+ int posX = (draw->rcItem.right / 2) - (scaledWidth / 2);
+ int posY = (draw->rcItem.bottom / 2) - (scaledHeight / 2);
+
+ FillRect(draw->hDC, &draw->rcItem,
GetSysColorBrush(COLOR_BACKGROUND));
+
+ SetStretchBltMode(draw->hDC, COLORONCOLOR);
+
+ if(g_placementSelection == PLACEMENT_CENTER)
+ {
+ StretchDIBits(draw->hDC,
+ posX,
+ posY,
+ scaledWidth,
+ scaledHeight,
+ 0,
+ 0,
+ g_pWallpaperBitmap->width,
+ g_pWallpaperBitmap->height,
+ g_pWallpaperBitmap->bits,
+ g_pWallpaperBitmap->info,
+ DIB_RGB_COLORS,
+ SRCCOPY);
+ }
+
+ if(g_placementSelection == PLACEMENT_STRETCH)
+ {
+ StretchDIBits(draw->hDC,
+ 0,
+ 0,
+ draw->rcItem.right,
+ draw->rcItem.bottom,
+ 0,
+ 0,
+ g_pWallpaperBitmap->width,
+ g_pWallpaperBitmap->height,
+ g_pWallpaperBitmap->bits,
+ g_pWallpaperBitmap->info,
+ DIB_RGB_COLORS,
+ SRCCOPY);
+ }
+
+ if(g_placementSelection == PLACEMENT_TILE)
+ {
+ int x;
+ int y;
+
+ for(y = 0; y < draw->rcItem.bottom; y += scaledHeight)
+ {
+ for(x = 0; x < draw->rcItem.right; x += scaledWidth)
+ {
+ StretchDIBits(draw->hDC,
+ x,
+ y,
+ scaledWidth,
+ scaledHeight,
+ 0,
+ 0,
+ g_pWallpaperBitmap->width,
+ g_pWallpaperBitmap->height,
+ g_pWallpaperBitmap->bits,
+ g_pWallpaperBitmap->info,
+ DIB_RGB_COLORS,
+ SRCCOPY);
+ }
+ }
+ }
+}
+
+void SetWallpaper()
+{
+ HKEY regKey;
+
+ RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Control Panel\\Desktop"), 0,
KEY_ALL_ACCESS, ®Key);
+
+ if(g_placementSelection == PLACEMENT_TILE)
+ {
+ RegSetValueEx(regKey, TEXT("TileWallpaper"), 0, REG_SZ, (BYTE
*)TEXT("1"), sizeof(TCHAR) * 2);
+ RegSetValueEx(regKey, TEXT("WallpaperStyle"), 0, REG_SZ, (BYTE
*)TEXT("0"), sizeof(TCHAR) * 2);
+ }
+
+ if(g_placementSelection == PLACEMENT_CENTER)
+ {
+ RegSetValueEx(regKey, TEXT("TileWallpaper"), 0, REG_SZ, (BYTE
*)TEXT("0"), sizeof(TCHAR) * 2);
+ RegSetValueEx(regKey, TEXT("WallpaperStyle"), 0, REG_SZ, (BYTE
*)TEXT("0"), sizeof(TCHAR) * 2);
+ }
+
+ if(g_placementSelection == PLACEMENT_STRETCH)
+ {
+ RegSetValueEx(regKey, TEXT("TileWallpaper"), 0, REG_SZ, (BYTE
*)TEXT("0"), sizeof(TCHAR) * 2);
+ RegSetValueEx(regKey, TEXT("WallpaperStyle"), 0, REG_SZ, (BYTE
*)TEXT("2"), sizeof(TCHAR) * 2);
+ }
+
+ RegCloseKey(regKey);
+
+ if(g_wallpaperSelection == -1)
+ {
+ SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, TEXT(""),
SPIF_UPDATEINIFILE);
+ }
+ else
+ {
+ SystemParametersInfo(SPI_SETDESKWALLPAPER,
+ 0,
+ g_wallpapers[g_wallpaperSelection],
+ SPIF_UPDATEINIFILE);
+ }
+}
+
+INT_PTR CALLBACK BackgroundPageProc(HWND hwndDlg,
+ UINT uMsg,
+ WPARAM wParam,
+ LPARAM lParam)
+{
+ g_hBackgroundTab = hwndDlg;
+
+ switch(uMsg)
+ {
+ case WM_INITDIALOG:
+ {
+ InitBackgroundDialog();
+ } break;
+
+ case WM_COMMAND:
+ {
+ DWORD controlId = LOWORD(wParam);
+ DWORD command = HIWORD(wParam);
+
+ switch(controlId)
+ {
+ case IDC_PATTERN:
+ {
+ if(command == BN_CLICKED)
+ OnPatternButton();
+ } break;
+
+ case IDC_BROWSE:
+ {
+ if(command == BN_CLICKED)
+ OnBrowseButton();
+ } break;
+
+ case IDC_PLACEMENT_COMBO:
+ {
+ if(command == CBN_SELCHANGE)
+ {
+ g_placementSelection =
SendMessage(g_hPlacementCombo, CB_GETCURSEL, 0, 0);
+
+ InvalidateRect(g_hWallpaperPreview,
NULL, TRUE);
+
+
PropSheet_Changed(GetParent(g_hBackgroundTab), g_hBackgroundTab);
+ }
+
+ } break;
+ }
+ } break;
+
+ case WM_DRAWITEM:
+ {
+ LPDRAWITEMSTRUCT drawItem;
+ drawItem = (LPDRAWITEMSTRUCT)lParam;
+
+ if(drawItem->CtlID == IDC_WALLPAPER_PREVIEW)
+ {
+ DrawWallpaperPreview(drawItem);
+ }
+
+ } break;
+
+ case WM_NOTIFY:
+ {
+ LPNMHDR lpnm = (LPNMHDR)lParam;
+
+ switch(lpnm->code)
+ {
+ case PSN_APPLY:
+ {
+ SetWallpaper();
+
+ /* Update the current wallapaper list item
to the
+ * currently selected wallpaper */
+ LV_ITEM listItem;
+ listItem.mask = LVIF_PARAM;
+ listItem.iSubItem = 0;
+ listItem.iItem = g_currentWallpaperItemId;
+ listItem.lParam = g_wallpaperSelection;
+
+ ListView_SetItem(g_hWallpaperList,
&listItem);
+
+ return TRUE;
+ } break;
+
+ case LVN_ITEMCHANGED:
+ {
+ LPNMLISTVIEW nm = (LPNMLISTVIEW)lParam;
+
+ if((nm->uNewState & LVIS_SELECTED) == 0)
+ return FALSE;
+
+ ListViewItemChanged(nm->iItem);
+
+ } break;
+
+ default:
+ break;
+ }
+
+ } break;
+
+ case WM_DESTROY:
+ {
+ if(g_pWallpaperBitmap != NULL)
+ DibFreeImage(g_pWallpaperBitmap);
+
+ } break;
+ }
+
+ return FALSE;
+}
+
Property changes on: trunk/reactos/lib/cpl/desk/background.c
___________________________________________________________________
Name: svn:keywords
+ author date id revision
Name: svn:eol-style
+ native
_____
Modified: trunk/reactos/lib/cpl/desk/desk.c
--- trunk/reactos/lib/cpl/desk/desk.c 2005-02-04 16:51:11 UTC (rev
13405)
+++ trunk/reactos/lib/cpl/desk/desk.c 2005-02-04 20:39:10 UTC (rev
13406)
@@ -1,214 +1,128 @@
-/*
- * ReactOS
- * Copyright (C) 2004 ReactOS Team
- *
- * This program is free software; you can redistribute it and/or
modify
- * it under the terms of the GNU General Public License as published
by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
/* $Id$
*
+ * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Display Control Panel
* FILE: lib/cpl/desk/desk.c
* PURPOSE: ReactOS Display Control Panel
- * PROGRAMMER: Gero Kuehn (reactos.filter(a)gkware.com)
- * UPDATE HISTORY:
- * 06-17-2004 Created
- * 08-07-2004 Initial Checkin
+ *
+ * PROGRAMMERS: Trevor McCort (lycan359(a)gmail.com)
*/
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <tchar.h>
#include <windows.h>
-
#include <commctrl.h>
#include <cpl.h>
-#include <process.h>
-
#include "resource.h"
#include "desk.h"
#define NUM_APPLETS (1)
-LONG CALLBACK DisplayApplet(VOID);
-INT_PTR CALLBACK BackgroundPageProc(HWND hwndDlg, UINT uMsg, WPARAM
wParam, LPARAM lParam);
-INT_PTR CALLBACK ScreenSaverPageProc(HWND hwndDlg, UINT uMsg, WPARAM
wParam, LPARAM lParam);
-INT_PTR CALLBACK AppearancePageProc(HWND hwndDlg, UINT uMsg, WPARAM
wParam, LPARAM lParam);
-INT_PTR CALLBACK SettingsPageProc(HWND hwndDlg, UINT uMsg, WPARAM
wParam, LPARAM lParam);
+LONG APIENTRY DisplayApplet(HWND hwnd, UINT uMsg, LONG wParam, LONG
lParam);
+extern INT_PTR CALLBACK BackgroundPageProc(HWND hwndDlg, UINT uMsg,
WPARAM wParam, LPARAM lParam);
+extern INT_PTR CALLBACK ScreenSaverPageProc(HWND hwndDlg, UINT uMsg,
WPARAM wParam, LPARAM lParam);
+extern INT_PTR CALLBACK AppearancePageProc(HWND hwndDlg, UINT uMsg,
WPARAM wParam, LPARAM lParam);
+extern INT_PTR CALLBACK SettingsPageProc(HWND hwndDlg, UINT uMsg,
WPARAM wParam, LPARAM lParam);
HINSTANCE hApplet = 0;
/* Applets */
APPLET Applets[NUM_APPLETS] =
{
- {IDI_CPLSYSTEM, IDS_CPLSYSTEMNAME, IDS_CPLSYSTEMDESCRIPTION,
DisplayApplet}
+ {
+ IDC_DESK_ICON,
+ IDS_CPLNAME,
+ IDS_CPLDESCRIPTION,
+ DisplayApplet
+ }
};
-
-
-/* Property page dialog callback */
-INT_PTR CALLBACK
-BackgroundPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM
lParam)
+static VOID InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC
DlgProc)
{
- switch(uMsg)
- {
- case WM_INITDIALOG:
- break;
- case WM_COMMAND:
- break;
- }
- return FALSE;
+ ZeroMemory(psp, sizeof(PROPSHEETPAGE));
+ psp->dwSize = sizeof(PROPSHEETPAGE);
+ psp->dwFlags = PSP_DEFAULT;
+ psp->hInstance = hApplet;
+ psp->pszTemplate = MAKEINTRESOURCE(idDlg);
+ psp->pfnDlgProc = DlgProc;
}
-
-/* Property page dialog callback */
-INT_PTR CALLBACK
-ScreenSaverPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM
lParam)
+/* Display Applet */
+LONG APIENTRY DisplayApplet(HWND hwnd, UINT uMsg, LONG wParam, LONG
lParam)
{
- switch(uMsg)
- {
- case WM_INITDIALOG:
- break;
- case WM_COMMAND:
- break;
- }
- return FALSE;
+ PROPSHEETPAGE psp[4];
+ PROPSHEETHEADER psh;
+ TCHAR Caption[1024];
+
+ LoadString(hApplet, IDS_CPLNAME, Caption, sizeof(Caption) /
sizeof(TCHAR));
+
+ ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
+ psh.dwSize = sizeof(PROPSHEETHEADER);
+ psh.dwFlags = PSH_PROPSHEETPAGE | PSH_USECALLBACK | PSH_PROPTITLE;
+ psh.hwndParent = NULL;
+ psh.hInstance = hApplet;
+ psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDC_DESK_ICON));
+ psh.pszCaption = Caption;
+ psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
+ psh.nStartPage = 0;
+ psh.ppsp = psp;
+
+ InitPropSheetPage(&psp[0], IDD_BACKGROUND, BackgroundPageProc);
+ InitPropSheetPage(&psp[1], IDD_SCREENSAVER, ScreenSaverPageProc);
+ InitPropSheetPage(&psp[2], IDD_APPEARANCE, AppearancePageProc);
+ InitPropSheetPage(&psp[3], IDD_SETTINGS, SettingsPageProc);
+
+ return (LONG)(PropertySheet(&psh) != -1);
}
-/* Property page dialog callback */
-INT_PTR CALLBACK
-AppearancePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM
lParam)
-{
- switch(uMsg)
- {
- case WM_INITDIALOG:
- break;
- case WM_COMMAND:
- break;
- }
- return FALSE;
-}
-
-
-/* Property page dialog callback */
-INT_PTR CALLBACK
-SettingsPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
- switch(uMsg)
- {
- case WM_INITDIALOG:
- break;
- case WM_COMMAND:
- break;
- }
- return FALSE;
-}
-
-
-static VOID
-InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc)
-{
- ZeroMemory(psp, sizeof(PROPSHEETPAGE));
- psp->dwSize = sizeof(PROPSHEETPAGE);
- psp->dwFlags = PSP_DEFAULT;
- psp->hInstance = hApplet;
- psp->pszTemplate = MAKEINTRESOURCE(idDlg);
- psp->pfnDlgProc = DlgProc;
-}
-
-
-/* First Applet */
-
-LONG CALLBACK
-DisplayApplet(VOID)
-{
- PROPSHEETPAGE psp[4];
- PROPSHEETHEADER psh;
- TCHAR Caption[1024];
-
- LoadString(hApplet, IDS_CPLSYSTEMNAME, Caption, sizeof(Caption)
/ sizeof(TCHAR));
-
- ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
- psh.dwSize = sizeof(PROPSHEETHEADER);
- psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE;
- psh.hwndParent = NULL;
- psh.hInstance = hApplet;
- psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDI_CPLSYSTEM));
- psh.pszCaption = Caption;
- psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
- psh.nStartPage = 0;
- psh.ppsp = psp;
- psh.pfnCallback = NULL;
-
- InitPropSheetPage(&psp[0], IDD_PROPPAGEBACKGROUND,
BackgroundPageProc);
- InitPropSheetPage(&psp[1], IDD_PROPPAGESCREENSAVER,
ScreenSaverPageProc);
- InitPropSheetPage(&psp[2], IDD_PROPPAGEAPPEARANCE,
AppearancePageProc);
- InitPropSheetPage(&psp[3], IDD_PROPPAGESETTINGS,
SettingsPageProc);
-
- return (LONG)(PropertySheet(&psh) != -1);
-}
-
-
/* Control Panel Callback */
-LONG CALLBACK
-CPlApplet(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
+LONG CALLBACK CPlApplet(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM
lParam2)
{
- int i = (int)lParam1;
-
- switch(uMsg)
- {
- case CPL_INIT:
- {
- return TRUE;
- }
- case CPL_GETCOUNT:
- {
- return NUM_APPLETS;
- }
- case CPL_INQUIRE:
- {
- CPLINFO *CPlInfo = (CPLINFO*)lParam2;
- CPlInfo->lData = 0;
- CPlInfo->idIcon = Applets[i].idIcon;
- CPlInfo->idName = Applets[i].idName;
- CPlInfo->idInfo = Applets[i].idDescription;
- break;
- }
- case CPL_DBLCLK:
- {
- Applets[i].AppletProc();
- break;
- }
- }
- return FALSE;
+ int i = (int)lParam1;
+
+ switch(uMsg)
+ {
+ case CPL_INIT:
+ {
+ return TRUE;
+ }
+
+ case CPL_GETCOUNT:
+ {
+ return NUM_APPLETS;
+ }
+
+ case CPL_INQUIRE:
+ {
+ CPLINFO *CPlInfo = (CPLINFO*)lParam2;
+ CPlInfo->lData = 0;
+ CPlInfo->idIcon = Applets[i].idIcon;
+ CPlInfo->idName = Applets[i].idName;
+ CPlInfo->idInfo = Applets[i].idDescription;
+ } break;
+
+ case CPL_DBLCLK:
+ {
+ Applets[i].AppletProc(hwndCPl, uMsg, lParam1, lParam2);
+ } break;
+ }
+
+ return FALSE;
}
-BOOL WINAPI
-DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpvReserved)
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID
lpvReserved)
{
- switch(dwReason)
- {
- case DLL_PROCESS_ATTACH:
- case DLL_THREAD_ATTACH:
- hApplet = hinstDLL;
- break;
[truncated at 1000 lines; 704 more skipped]