diff --git a/reactos/dll/cpl/desk/Fr.rc b/reactos/dll/cpl/desk/Fr.rc
index cc90943e54d..4b33af23251 100644
--- a/reactos/dll/cpl/desk/Fr.rc
+++ b/reactos/dll/cpl/desk/Fr.rc
@@ -52,13 +52,15 @@ BEGIN
PUSHBUTTON "&Gestion de l'alimentation",IDC_SCREENS_POWER_BUTTON,165, 162, 73, 15
END
-IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 188
+IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Apparence"
FONT 8, "MS Shell Dlg"
BEGIN
+ CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass",
+ WS_VISIBLE | WS_BORDER, 7, 7, 232, 120
LTEXT "Vide pour l'instant....",IDC_STATIC,66,
- 90,112,8
+ 150,112,8
END
IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 188
diff --git a/reactos/dll/cpl/desk/It.rc b/reactos/dll/cpl/desk/It.rc
index 4c003cfbb7f..9ed5775a541 100644
--- a/reactos/dll/cpl/desk/It.rc
+++ b/reactos/dll/cpl/desk/It.rc
@@ -46,13 +46,15 @@ BEGIN
PUSHBUTTON "&Alimentazione",IDC_SCREENS_POWER_BUTTON,165, 162, 73, 15
END
-IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 188
+IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Aspetto"
FONT 8, "MS Shell Dlg"
BEGIN
+ CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass",
+ WS_VISIBLE | WS_BORDER, 7, 7, 232, 120
LTEXT "Questo spazio stato intenzionalmente lasciato in bianco.",IDC_STATIC,66,
- 90,112,8
+ 150,112,8
END
IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 188
diff --git a/reactos/dll/cpl/desk/Ja.rc b/reactos/dll/cpl/desk/Ja.rc
index 73d1ed8e39a..65052092ea0 100644
--- a/reactos/dll/cpl/desk/Ja.rc
+++ b/reactos/dll/cpl/desk/Ja.rc
@@ -55,8 +55,10 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Oς̃fUC"
FONT 9, "MS UI Gothic"
BEGIN
+ CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass",
+ WS_VISIBLE | WS_BORDER, 7, 7, 232, 120
LTEXT "͈Ӑ}Iɋ܂܂ɂĂ܂",IDC_STATIC,66,
- 110,112,8
+ 150,112,8
END
IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 228
diff --git a/reactos/dll/cpl/desk/Ru.rc b/reactos/dll/cpl/desk/Ru.rc
index 17e00ada261..dc2dc3b8874 100644
--- a/reactos/dll/cpl/desk/Ru.rc
+++ b/reactos/dll/cpl/desk/Ru.rc
@@ -49,12 +49,14 @@ BEGIN
15
END
-IDD_APPEARANCE DIALOGEX 0, 0, 246, 188
+IDD_APPEARANCE DIALOGEX 0, 0, 246, 228
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION ""
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
- LTEXT " ",IDC_STATIC,65,87,114,8
+ CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass",
+ WS_VISIBLE | WS_BORDER, 7, 7, 232, 120
+ LTEXT " ",IDC_STATIC,65,150,114,8
END
IDD_SETTINGS DIALOGEX 0, 0, 246, 188
diff --git a/reactos/dll/cpl/desk/Uk.rc b/reactos/dll/cpl/desk/Uk.rc
index 62e2f1387c8..6e79a92f76c 100644
--- a/reactos/dll/cpl/desk/Uk.rc
+++ b/reactos/dll/cpl/desk/Uk.rc
@@ -54,13 +54,15 @@ BEGIN
PUSHBUTTON " &",IDC_SCREENS_POWER_BUTTON,165, 162, 73, 15
END
-IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 188
+IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION ""
FONT 8, "MS Shell Dlg"
BEGIN
+ CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass",
+ WS_VISIBLE | WS_BORDER, 7, 7, 232, 120
LTEXT " ",IDC_STATIC,66,
- 90,112,8
+ 150,112,8
END
IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 188
diff --git a/reactos/dll/cpl/desk/cz.rc b/reactos/dll/cpl/desk/cz.rc
index 36d4e5d7a8f..eedfaedc8bb 100644
--- a/reactos/dll/cpl/desk/cz.rc
+++ b/reactos/dll/cpl/desk/cz.rc
@@ -50,13 +50,15 @@ BEGIN
PUSHBUTTON "M&onosti napjen",IDC_SCREENS_POWER_BUTTON,165, 162, 73, 15
END
-IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 188
+IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Vzhled"
FONT 8, "MS Shell Dlg"
BEGIN
+ CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass",
+ WS_VISIBLE | WS_BORDER, 7, 7, 232, 120
LTEXT "This space is intentionally left blank",IDC_STATIC,66,
- 90,112,8
+ 150,112,8
END
IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 188
diff --git a/reactos/dll/cpl/desk/de.rc b/reactos/dll/cpl/desk/de.rc
index 637b731c07b..ce34484b524 100644
--- a/reactos/dll/cpl/desk/de.rc
+++ b/reactos/dll/cpl/desk/de.rc
@@ -1,6 +1,6 @@
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
-IDD_BACKGROUND DIALOGEX DISCARDABLE 0, 0, 246, 205
+IDD_BACKGROUND DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Hintergrund"
FONT 8, "MS Shell Dlg"
@@ -15,12 +15,14 @@ BEGIN
COMBOBOX IDC_PLACEMENT_COMBO, 188, 149, 50, 54, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
END
-IDD_SCREENSAVER DIALOGEX DISCARDABLE 0, 0, 246, 188
+IDD_SCREENSAVER DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Bildschirmschoner"
FONT 8, "MS Shell Dlg"
BEGIN
- GROUPBOX "&Bildschrimschoner",IDC_SCREENS_DUMMY, 5, 7, 238, 136
+ CONTROL "", IDC_SCREENS_PREVIEW, "Static", SS_OWNERDRAW, 80, 10, 83, 57, WS_EX_STATICEDGE
+
+ GROUPBOX "&Bildschrimschoner",IDC_STATIC, 5, 7, 238, 136
LTEXT "Installierte Bildschrimschoner:",IDC_STATIC,13, 24, 150, 9
CONTROL "",IDC_SCREENS_CHOICES,"SysListView32",LVS_REPORT |
@@ -46,28 +48,19 @@ BEGIN
PUSHBUTTON "Energ&ieeinstellungen",IDC_SCREENS_POWER_BUTTON,165, 162, 73, 15
END
-IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 188
+IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Darstellung"
FONT 8, "MS Shell Dlg"
BEGIN
+ CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass",
+ WS_VISIBLE | WS_BORDER, 7, 7, 232, 120
+
LTEXT "This space is intentionally left blank",IDC_STATIC,66,
- 90,112,8
+ 150,112,8
END
-IDR_POPUP_MENU MENU DISCARDABLE
-BEGIN
- POPUP ""
- BEGIN
- MENUITEM "&Konfigurieren", ID_MENU_CONFIG
- MENUITEM "&Vorschau", ID_MENU_PREVIEW
- MENUITEM SEPARATOR
- MENUITEM "&Hinzufgen", ID_MENU_ADD
- MENUITEM "&Lschen\tDel", ID_MENU_DELETE
- END
-END
-
-IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 188
+IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Einstellungen"
FONT 8, "MS Shell Dlg"
@@ -88,11 +81,22 @@ BEGIN
PUSHBUTTON "&Erweitert",IDC_SETTINGS_ADVANCED,306,165,56,14
END
-STRINGTABLE
+IDR_POPUP_MENU MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "&Konfigurieren", ID_MENU_CONFIG
+ MENUITEM "&Vorschau", ID_MENU_PREVIEW
+ MENUITEM SEPARATOR
+ MENUITEM "&Hinzufgen", ID_MENU_ADD
+ MENUITEM "&Lschen\tDel", ID_MENU_DELETE
+ END
+END
+
+STRINGTABLE
BEGIN
IDS_CPLNAME "Anzeige"
IDS_CPLDESCRIPTION "Passt die Darstellung des Hintergrundbildes und des Bildschirmschoners an."
-
IDS_NONE "(Keine)"
IDS_CENTER "Zentriert"
IDS_STRETCH "Gestreckt"
diff --git a/reactos/dll/cpl/desk/desk.c b/reactos/dll/cpl/desk/desk.c
index c92480a7c7e..c22e20e898c 100644
--- a/reactos/dll/cpl/desk/desk.c
+++ b/reactos/dll/cpl/desk/desk.c
@@ -9,6 +9,7 @@
*/
#include "desk.h"
+#include "preview.h"
#define NUM_APPLETS (1)
@@ -114,15 +115,20 @@ CPlApplet(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
BOOL WINAPI
-DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpvReserved)
+DllMain(HINSTANCE hInstDLL, DWORD dwReason, LPVOID lpvReserved)
{
UNREFERENCED_PARAMETER(lpvReserved);
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
- case DLL_THREAD_ATTACH:
- hApplet = hinstDLL;
+ RegisterPreviewControl(hInstDLL);
+// case DLL_THREAD_ATTACH:
+ hApplet = hInstDLL;
+ break;
+
+ case DLL_PROCESS_DETACH:
+ UnregisterPreviewControl(hInstDLL);
break;
}
diff --git a/reactos/dll/cpl/desk/desk.rbuild b/reactos/dll/cpl/desk/desk.rbuild
index 2088c9950f1..d3bce254d2d 100644
--- a/reactos/dll/cpl/desk/desk.rbuild
+++ b/reactos/dll/cpl/desk/desk.rbuild
@@ -27,5 +27,6 @@
appearance.c
settings.c
dibitmap.c
+ preview.c
desk.rc
diff --git a/reactos/dll/cpl/desk/en.rc b/reactos/dll/cpl/desk/en.rc
index e19b1c0e978..88886dba5a6 100644
--- a/reactos/dll/cpl/desk/en.rc
+++ b/reactos/dll/cpl/desk/en.rc
@@ -46,13 +46,15 @@ BEGIN
PUSHBUTTON "P&ower Settings",IDC_SCREENS_POWER_BUTTON,165, 162, 73, 15
END
-IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 188
+IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Appearance"
FONT 8, "MS Shell Dlg"
BEGIN
+ CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass",
+ WS_VISIBLE | WS_BORDER, 7, 7, 232, 120
LTEXT "This space is intentionally left blank",IDC_STATIC,66,
- 90,112,8
+ 150,112,8
END
IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 188
diff --git a/reactos/dll/cpl/desk/es.rc b/reactos/dll/cpl/desk/es.rc
index 3444d60929c..bfdf3bda6af 100644
--- a/reactos/dll/cpl/desk/es.rc
+++ b/reactos/dll/cpl/desk/es.rc
@@ -57,13 +57,15 @@ BEGIN
PUSHBUTTON "Energa...",IDC_SCREENS_POWER_BUTTON,165, 162, 73, 15
END
-IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 188
+IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Apariencia"
FONT 8, "MS Shell Dlg"
BEGIN
+ CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass",
+ WS_VISIBLE | WS_BORDER, 7, 7, 232, 120
LTEXT "Este espacio se ha dejado en blanco intencionadamente",IDC_STATIC,33,
- 89,181,10
+ 150,181,10
END
IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 188
diff --git a/reactos/dll/cpl/desk/gr.rc b/reactos/dll/cpl/desk/gr.rc
index c21ad3af356..3ec020e6869 100644
--- a/reactos/dll/cpl/desk/gr.rc
+++ b/reactos/dll/cpl/desk/gr.rc
@@ -50,13 +50,15 @@ BEGIN
PUSHBUTTON "& ",IDC_SCREENS_POWER_BUTTON,165, 162, 73, 15
END
-IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 188
+IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION ""
FONT 8, "MS Shell Dlg"
BEGIN
+ CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass",
+ WS_VISIBLE | WS_BORDER, 7, 7, 232, 120
LTEXT "This space is intentionally left blank",IDC_STATIC,66,
- 90,112,8
+ 150,112,8
END
IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 188
diff --git a/reactos/dll/cpl/desk/hu.rc b/reactos/dll/cpl/desk/hu.rc
index 944d76c24ba..7277f58f292 100644
--- a/reactos/dll/cpl/desk/hu.rc
+++ b/reactos/dll/cpl/desk/hu.rc
@@ -42,12 +42,14 @@ BEGIN
PUSHBUTTON "E&nergiaellts",IDC_SCREENS_POWER_BUTTON,165, 162, 73, 15
END
-IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 188
+IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Megjelens"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Ez a terlet szndkosan lett resen hagyva",IDC_STATIC,66,90,112,8
+ CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass",
+ WS_VISIBLE | WS_BORDER, 7, 7, 232, 120
+ LTEXT "Ez a terlet szndkosan lett resen hagyva",IDC_STATIC,66,150,112,8
END
IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 188
diff --git a/reactos/dll/cpl/desk/nl.rc b/reactos/dll/cpl/desk/nl.rc
index 7c8b96c2617..e3d8b3ab617 100644
--- a/reactos/dll/cpl/desk/nl.rc
+++ b/reactos/dll/cpl/desk/nl.rc
@@ -50,13 +50,15 @@ BEGIN
PUSHBUTTON "Inst&ellingen",IDC_SCREENS_POWER_BUTTON,165, 162, 73, 15
END
-IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 188
+IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Appearance"
FONT 8, "MS Shell Dlg"
BEGIN
+ CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass",
+ WS_VISIBLE | WS_BORDER, 7, 7, 232, 120
LTEXT "This space is intentionally left blank",IDC_STATIC,66,
- 90,112,8
+ 150,112,8
END
IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 188
diff --git a/reactos/dll/cpl/desk/pl.rc b/reactos/dll/cpl/desk/pl.rc
index e1d83cc6662..c3899d24f38 100644
--- a/reactos/dll/cpl/desk/pl.rc
+++ b/reactos/dll/cpl/desk/pl.rc
@@ -51,13 +51,15 @@ BEGIN
PUSHBUTTON "Z&asilanie",IDC_SCREENS_POWER_BUTTON,165, 162, 73, 15
END
-IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 188
+IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Wygld"
FONT 8, "MS Shell Dlg"
BEGIN
+ CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass",
+ WS_VISIBLE | WS_BORDER, 7, 7, 232, 120
LTEXT "To miejsce pozostao celowo puste",IDC_STATIC,66,
- 90,112,8
+ 1590,112,8
END
IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 188
diff --git a/reactos/dll/cpl/desk/preview.c b/reactos/dll/cpl/desk/preview.c
new file mode 100644
index 00000000000..92b51314011
--- /dev/null
+++ b/reactos/dll/cpl/desk/preview.c
@@ -0,0 +1,282 @@
+/*
+ * PROJECT: ReactOS Timedate Control Panel
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: lib/cpl/desk/preview.c
+ * PURPOSE: Draws the preview control
+ * COPYRIGHT: Copyright 2006 Eric Kohl
+ */
+
+#include "desk.h"
+#include "preview.h"
+
+static const TCHAR szPreviewWndClass[] = TEXT("PreviewWndClass");
+
+typedef struct _PREVIEW_DATA
+{
+ DWORD clrDesktop;
+ HBRUSH hbrDesktop;
+
+ DWORD clrWindow;
+ HBRUSH hbrWindow;
+
+ INT cxEdge;
+ INT cyEdge;
+
+ INT cyCaption;
+
+ RECT rcDesktop;
+ RECT rcInactiveFrame;
+ RECT rcInactiveCaption;
+
+ RECT rcActiveFrame;
+ RECT rcActiveCaption;
+ RECT rcActiveClient;
+ RECT rcActiveScroll;
+
+ RECT rcDialogFrame;
+ RECT rcDialogCaption;
+ RECT rcDialogClient;
+
+ RECT rcDialogButton;
+
+} PREVIEW_DATA, *PPREVIEW_DATA;
+
+
+static VOID
+DrawCaptionButtons(HDC hdc, LPRECT lpRect, BOOL bMinMax)
+{
+ RECT rc3;
+ RECT rc4;
+ RECT rc5;
+
+ rc3.left = lpRect->right - 2 - 16;
+ rc3.top = lpRect->top + 2;
+ rc3.right = lpRect->right - 2;
+ rc3.bottom = lpRect->bottom - 2;
+
+ DrawFrameControl(hdc, &rc3, DFC_CAPTION, DFCS_CAPTIONCLOSE);
+
+ if (bMinMax)
+ {
+ rc4.left = rc3.left - 16 - 2;
+ rc4.top = rc3.top;
+ rc4.right = rc3.right - 16 - 2;
+ rc4.bottom = rc3.bottom;
+
+ DrawFrameControl(hdc, &rc4, DFC_CAPTION, DFCS_CAPTIONMAX);
+
+ rc5.left = rc4.left - 16;
+ rc5.top = rc4.top;
+ rc5.right = rc4.right - 16;
+ rc5.bottom = rc4.bottom;
+
+ DrawFrameControl(hdc, &rc5, DFC_CAPTION, DFCS_CAPTIONMIN);
+ }
+}
+
+
+static VOID
+OnSize(INT cx, INT cy, PPREVIEW_DATA pPreviewData)
+{
+ int width, height;
+
+ /* Get Desktop rectangle */
+ pPreviewData->rcDesktop.left = 0;
+ pPreviewData->rcDesktop.top = 0;
+ pPreviewData->rcDesktop.right = cx;
+ pPreviewData->rcDesktop.bottom = cy;
+
+ /* Calculate the inactive window rectangle */
+ pPreviewData->rcInactiveFrame.left = pPreviewData->rcDesktop.left + 8;
+ pPreviewData->rcInactiveFrame.top = pPreviewData->rcDesktop.top + 8;
+ pPreviewData->rcInactiveFrame.right = pPreviewData->rcDesktop.right - 25;
+ pPreviewData->rcInactiveFrame.bottom = pPreviewData->rcDesktop.bottom - 30;
+
+ /* Calculate the inactive caption rectangle */
+ pPreviewData->rcInactiveCaption.left = pPreviewData->rcInactiveFrame.left + pPreviewData->cxEdge + 1/*3*/ + 1;
+ pPreviewData->rcInactiveCaption.top = pPreviewData->rcInactiveFrame.top + pPreviewData->cyEdge + 1/*3*/ + 1;
+ pPreviewData->rcInactiveCaption.right = pPreviewData->rcInactiveFrame.right - pPreviewData->cxEdge - 1/*3*/ - 1;
+ pPreviewData->rcInactiveCaption.bottom = pPreviewData->rcInactiveFrame.top + pPreviewData->cyCaption /*20*/ + 2;
+
+ /* Calculate the active window rectangle */
+ pPreviewData->rcActiveFrame.left = pPreviewData->rcInactiveFrame.left + 3 + 1;
+ pPreviewData->rcActiveFrame.top = pPreviewData->rcInactiveCaption.bottom + 2;
+ pPreviewData->rcActiveFrame.right = pPreviewData->rcDesktop.right - 10;
+ pPreviewData->rcActiveFrame.bottom = pPreviewData->rcDesktop.bottom - 25;
+
+ /* Calculate the active caption rectangle */
+ pPreviewData->rcActiveCaption.left = pPreviewData->rcActiveFrame.left + 3 + 1;
+ pPreviewData->rcActiveCaption.top = pPreviewData->rcActiveFrame.top + 3 + 1;
+ pPreviewData->rcActiveCaption.right = pPreviewData->rcActiveFrame.right - 3 - 1;
+ pPreviewData->rcActiveCaption.bottom = pPreviewData->rcActiveFrame.top + pPreviewData->cyCaption/*20*/ + 2;
+
+ /* FIXME: Calculate the active menu bar rectangle */
+
+ /* Calculate the active client rectangle */
+ pPreviewData->rcActiveClient.left = pPreviewData->rcActiveFrame.left + 3 + 1;
+ pPreviewData->rcActiveClient.top = pPreviewData->rcActiveCaption.bottom + 20 + 2;
+ pPreviewData->rcActiveClient.right = pPreviewData->rcActiveFrame.right - 3 - 1;
+ pPreviewData->rcActiveClient.bottom = pPreviewData->rcActiveFrame.bottom - 3 - 1;
+
+ /* Calculate the active scroll rectangle */
+ pPreviewData->rcActiveScroll.left = pPreviewData->rcActiveClient.right - 2 - 16;
+ pPreviewData->rcActiveScroll.top = pPreviewData->rcActiveClient.top + 2;
+ pPreviewData->rcActiveScroll.right = pPreviewData->rcActiveClient.right - 2;
+ pPreviewData->rcActiveScroll.bottom = pPreviewData->rcActiveClient.bottom - 2;
+
+
+ /* Dialog window */
+ pPreviewData->rcDialogFrame.left = pPreviewData->rcActiveClient.left + 4;
+ pPreviewData->rcDialogFrame.top = (pPreviewData->rcDesktop.bottom * 60) / 100;
+ pPreviewData->rcDialogFrame.right = (pPreviewData->rcDesktop.right * 65) / 100;
+ pPreviewData->rcDialogFrame.bottom = pPreviewData->rcDesktop.bottom - 5;
+
+ /* Calculate the dialog caption rectangle */
+ pPreviewData->rcDialogCaption.left = pPreviewData->rcDialogFrame.left + 3;
+ pPreviewData->rcDialogCaption.top = pPreviewData->rcDialogFrame.top + 3;
+ pPreviewData->rcDialogCaption.right = pPreviewData->rcDialogFrame.right - 3;
+ pPreviewData->rcDialogCaption.bottom = pPreviewData->rcDialogFrame.top + 20 + 2;
+
+ /* Calculate the dialog client rectangle */
+ pPreviewData->rcDialogClient.left = pPreviewData->rcDialogFrame.left + 3;
+ pPreviewData->rcDialogClient.top = pPreviewData->rcDialogCaption.bottom + 1;
+ pPreviewData->rcDialogClient.right = pPreviewData->rcDialogFrame.right - 3;
+ pPreviewData->rcDialogClient.bottom = pPreviewData->rcDialogFrame.bottom - 3;
+
+ /* Calculate the dialog button rectangle */
+ width = 80;
+ height = 28;
+
+ pPreviewData->rcDialogButton.left =
+ (pPreviewData->rcDialogClient.right + pPreviewData->rcDialogClient.left - width) / 2;
+ pPreviewData->rcDialogButton.right = pPreviewData->rcDialogButton.left + width;
+ pPreviewData->rcDialogButton.bottom = pPreviewData->rcDialogClient.bottom - 2;
+ pPreviewData->rcDialogButton.top = pPreviewData->rcDialogButton.bottom - height;
+}
+
+
+static VOID
+DrawScrollbar(HDC hdc, LPRECT rc)
+{
+
+}
+
+
+static LRESULT CALLBACK
+PreviewWndProc(HWND hwnd,
+ UINT uMsg,
+ WPARAM wParam,
+ LPARAM lParam)
+{
+ PPREVIEW_DATA pPreviewData;
+ HDC hdc;
+ PAINTSTRUCT ps;
+ RECT rc;
+
+ pPreviewData = (PPREVIEW_DATA)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+
+ switch (uMsg)
+ {
+ case WM_CREATE:
+ pPreviewData = (PPREVIEW_DATA)HeapAlloc(GetProcessHeap(),
+ HEAP_ZERO_MEMORY,
+ sizeof(PREVIEW_DATA));
+ if (pPreviewData)
+ {
+ SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)pPreviewData);
+ pPreviewData->clrDesktop = GetSysColor(COLOR_DESKTOP);
+ pPreviewData->hbrDesktop = CreateSolidBrush(pPreviewData->clrDesktop);
+ pPreviewData->clrWindow = GetSysColor(COLOR_WINDOW);
+ pPreviewData->hbrWindow = CreateSolidBrush(pPreviewData->clrWindow);
+
+ pPreviewData->cxEdge = GetSystemMetrics(SM_CXEDGE);
+ pPreviewData->cyEdge = GetSystemMetrics(SM_CXEDGE);
+
+ pPreviewData->cyCaption = 20; //GetSystemMetrics(SM_CYCAPTION);
+ }
+ break;
+
+ case WM_SIZE:
+ OnSize(LOWORD(lParam), HIWORD(lParam), pPreviewData);
+ break;
+
+ case WM_PAINT:
+ hdc = BeginPaint(hwnd, &ps);
+
+ /* Desktop */
+ FillRect(hdc, &pPreviewData->rcDesktop, pPreviewData->hbrDesktop);
+
+ /* Inactive Window */
+ DrawEdge(hdc, &pPreviewData->rcInactiveFrame, EDGE_RAISED, BF_RECT | BF_MIDDLE);
+ DrawCaption(hwnd, hdc, &pPreviewData->rcInactiveCaption, DC_GRADIENT | DC_TEXT);
+ DrawCaptionButtons(hdc, &pPreviewData->rcInactiveCaption, TRUE);
+
+
+ /* Active Window */
+ DrawEdge(hdc, &pPreviewData->rcActiveFrame, EDGE_RAISED, BF_RECT | BF_MIDDLE);
+ DrawCaption(hwnd, hdc, &pPreviewData->rcActiveCaption, DC_ACTIVE | DC_GRADIENT | DC_TEXT);
+ DrawCaptionButtons(hdc, &pPreviewData->rcActiveCaption, TRUE);
+
+ /* FIXME: Draw the menu bar */
+ CopyRect(&rc, &pPreviewData->rcActiveClient);
+ DrawEdge(hdc, &rc, EDGE_SUNKEN, BF_RECT | BF_ADJUST);
+ FillRect(hdc, &rc, pPreviewData->hbrWindow);
+
+ /* FIXME: Draw the client text */
+
+ /* Draw the scroll bar */
+ DrawScrollbar(hdc, &pPreviewData->rcActiveScroll);
+
+
+ /* Dialog Window */
+ DrawEdge(hdc, &pPreviewData->rcDialogFrame, EDGE_RAISED, BF_RECT | BF_MIDDLE);
+ DrawCaption(hwnd, hdc, &pPreviewData->rcDialogCaption, DC_ACTIVE | DC_GRADIENT | DC_TEXT);
+ DrawCaptionButtons(hdc, &pPreviewData->rcDialogCaption, FALSE);
+
+ /* Draw Button */
+ DrawFrameControl(hdc, &pPreviewData->rcDialogButton, DFC_BUTTON, DFCS_BUTTONPUSH);
+
+
+ EndPaint(hwnd, &ps);
+ break;
+
+ case WM_DESTROY:
+ DeleteObject(pPreviewData->hbrDesktop);
+ DeleteObject(pPreviewData->hbrWindow);
+
+ HeapFree(GetProcessHeap(), 0, pPreviewData);
+ break;
+
+ default:
+ DefWindowProc(hwnd,
+ uMsg,
+ wParam,
+ lParam);
+ }
+
+ return TRUE;
+}
+
+
+BOOL
+RegisterPreviewControl(IN HINSTANCE hInstance)
+{
+ WNDCLASSEX wc = {0};
+
+ wc.cbSize = sizeof(WNDCLASSEX);
+ wc.lpfnWndProc = PreviewWndProc;
+ wc.hInstance = hInstance;
+ wc.hCursor = LoadCursor(NULL, IDC_ARROW);
+ wc.hbrBackground = (HBRUSH)NULL; //(COLOR_BTNFACE + 1);
+ wc.lpszClassName = szPreviewWndClass;
+
+ return RegisterClassEx(&wc) != (ATOM)0;
+}
+
+
+VOID
+UnregisterPreviewControl(IN HINSTANCE hInstance)
+{
+ UnregisterClass(szPreviewWndClass,
+ hInstance);
+}
diff --git a/reactos/dll/cpl/desk/preview.h b/reactos/dll/cpl/desk/preview.h
new file mode 100644
index 00000000000..5d4cbeef6f2
--- /dev/null
+++ b/reactos/dll/cpl/desk/preview.h
@@ -0,0 +1,4 @@
+
+
+BOOL RegisterPreviewControl(IN HINSTANCE hInstance);
+VOID UnregisterPreviewControl(IN HINSTANCE hInstance);
diff --git a/reactos/dll/cpl/desk/resource.h b/reactos/dll/cpl/desk/resource.h
index cc0e7c00d45..ef407e4697c 100644
--- a/reactos/dll/cpl/desk/resource.h
+++ b/reactos/dll/cpl/desk/resource.h
@@ -36,8 +36,8 @@
/* Screensaver Page */
-#define IDC_SCREENS_CHOICES 1010
-#define IDC_SCREENS_PREVIEW 1011
+#define IDC_SCREENS_PREVIEW 1010
+#define IDC_SCREENS_CHOICES 1011
#define IDC_SCREENS_POWER_BUTTON 1012
#define IDC_SCREENS_SETTINGS 1013
#define IDC_SCREENS_TESTSC 1014
@@ -55,7 +55,7 @@
#define IDS_STRETCH 2004
#define IDS_TILE 2005
-#define IDC_SETTINGS_DEVICE 201
+#define IDC_SETTINGS_DEVICE 201
#define IDC_SETTINGS_BPP 202
#define IDC_SETTINGS_RESOLUTION 203
#define IDC_SETTINGS_RESOLUTION_TEXT 204
@@ -76,7 +76,11 @@
#define IDS_COLOR_8BIT 2908
#define IDS_COLOR_16BIT 2916
#define IDS_COLOR_24BIT 2924
-#define IDS_COLOR_32BIT 2932
+#define IDS_COLOR_32BIT 2932
+
+
+/* Appearance Page */
+#define IDC_APPEARANCE_PREVIEW 1500
#endif /* __CPL_DESK_RESOURCE_H__ */
diff --git a/reactos/dll/cpl/desk/sv.rc b/reactos/dll/cpl/desk/sv.rc
index 5b0d6e33c60..e2251013eda 100644
--- a/reactos/dll/cpl/desk/sv.rc
+++ b/reactos/dll/cpl/desk/sv.rc
@@ -53,13 +53,15 @@ BEGIN
PUSHBUTTON "Ins&tllningar",IDC_SCREENS_POWER_BUTTON,165, 162, 73, 15
END
-IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 188
+IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Utseende"
FONT 8, "MS Shell Dlg"
BEGIN
+ CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass",
+ WS_VISIBLE | WS_BORDER, 7, 7, 232, 120
LTEXT "Det hr utrymmet har avsiktligt\nlmnats tomt",IDC_STATIC,66,
- 90,112,20
+ 150,112,20
END
IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 188