From f3908f6d8376a02ff9576413c9e7cbda3ee6281b Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Tue, 2 Jan 2007 21:53:26 +0000 Subject: [PATCH] Add the appearance preview control. Right now it doesn't do much but sitting there and looking great. ;-) svn path=/trunk/; revision=25279 --- reactos/dll/cpl/desk/Fr.rc | 6 +- reactos/dll/cpl/desk/It.rc | 6 +- reactos/dll/cpl/desk/Ja.rc | 4 +- reactos/dll/cpl/desk/Ru.rc | 6 +- reactos/dll/cpl/desk/Uk.rc | 6 +- reactos/dll/cpl/desk/cz.rc | 6 +- reactos/dll/cpl/desk/de.rc | 44 ++--- reactos/dll/cpl/desk/desk.c | 12 +- reactos/dll/cpl/desk/desk.rbuild | 1 + reactos/dll/cpl/desk/en.rc | 6 +- reactos/dll/cpl/desk/es.rc | 6 +- reactos/dll/cpl/desk/gr.rc | 6 +- reactos/dll/cpl/desk/hu.rc | 6 +- reactos/dll/cpl/desk/nl.rc | 6 +- reactos/dll/cpl/desk/pl.rc | 6 +- reactos/dll/cpl/desk/preview.c | 282 +++++++++++++++++++++++++++++++ reactos/dll/cpl/desk/preview.h | 4 + reactos/dll/cpl/desk/resource.h | 12 +- reactos/dll/cpl/desk/sv.rc | 6 +- 19 files changed, 379 insertions(+), 52 deletions(-) create mode 100644 reactos/dll/cpl/desk/preview.c create mode 100644 reactos/dll/cpl/desk/preview.h 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