Author: ekohl
Date: Sat Jan 27 17:53:18 2007
New Revision: 25649
URL: 
http://svn.reactos.org/svn/reactos?rev=25649&view=rev
Log:
set properties
Modified:
    trunk/reactos/dll/cpl/desk/preview.c   (contents, props changed)
    trunk/reactos/dll/cpl/desk/preview.h   (contents, props changed)
Modified: trunk/reactos/dll/cpl/desk/preview.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/preview.c?rev…
==============================================================================
--- trunk/reactos/dll/cpl/desk/preview.c (original)
+++ trunk/reactos/dll/cpl/desk/preview.c Sat Jan 27 17:53:18 2007
@@ -1,526 +1,526 @@
-/*
- * 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, 2007 Eric Kohl
- */
-
-#include "desk.h"
-#include "preview.h"
-
-static const TCHAR szPreviewWndClass[] = TEXT("PreviewWndClass");
-
-typedef struct _PREVIEW_DATA
-{
-    HWND hwndParent;
-
-    DWORD clrDesktop;
-    HBRUSH hbrDesktop;
-
-    DWORD clrWindow;
-    HBRUSH hbrWindow;
-
-    DWORD clrScrollbar;
-    HBRUSH hbrScrollbar;
-
-    DWORD clrActiveCaptionText;
-    DWORD clrInactiveCaptionText;
-    DWORD clrWindowText;
-    DWORD clrButtonText;
-
-    INT cxEdge;
-    INT cyEdge;
-
-    INT cyCaption;
-
-    RECT rcDesktop;
-    RECT rcInactiveFrame;
-    RECT rcInactiveCaption;
-    RECT rcInactiveCaptionButtons;
-
-    RECT rcActiveFrame;
-    RECT rcActiveCaption;
-    RECT rcActiveCaptionButtons;
-    RECT rcActiveMenuBar;
-    RECT rcSelectedMenuItem;
-    RECT rcActiveClient;
-    RECT rcActiveScroll;
-
-    RECT rcDialogFrame;
-    RECT rcDialogCaption;
-    RECT rcDialogCaptionButtons;
-    RECT rcDialogClient;
-
-    RECT rcDialogButton;
-
-    LPTSTR lpInAct;
-    LPTSTR lpAct;
-    LPTSTR lpWinTxt;
-    LPTSTR lpMessBox;
-    LPTSTR lpMessText;
-    LPTSTR lpButText;
-
-    LOGFONT lfCaptionFont;
-    LOGFONT lfMenuFont;
-    LOGFONT lfMessageFont;
-
-    HFONT hCaptionFont;
-    HFONT hMenuFont;
-    HFONT hMessageFont;
-
-    HMENU hMenu;
-
-} 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
-DrawScrollbar(HDC hdc, LPRECT rc, HBRUSH hbrScrollbar)
-{
-    RECT rcTop;
-    RECT rcBottom;
-    RECT rcMiddle;
-    int width;
-
-    width = rc->right - rc->left;
-
-    rcTop.left = rc->left;
-    rcTop.right = rc->right;
-    rcTop.top = rc->top;
-    rcTop.bottom = rc->top + width;
-
-    rcMiddle.left = rc->left;
-    rcMiddle.right = rc->right;
-    rcMiddle.top = rc->top + width;
-    rcMiddle.bottom = rc->bottom - width;
-
-    rcBottom.left = rc->left;
-    rcBottom.right = rc->right;
-    rcBottom.top = rc->bottom - width;
-    rcBottom.bottom = rc->bottom;
-
-    DrawFrameControl(hdc, &rcTop, DFC_SCROLL, DFCS_SCROLLUP);
-    DrawFrameControl(hdc, &rcBottom, DFC_SCROLL, DFCS_SCROLLDOWN);
-
-    FillRect(hdc, &rcMiddle, hbrScrollbar);
-}
-
-
-static VOID
-OnCreate(HWND hwnd, PPREVIEW_DATA pPreviewData)
-{
-    NONCLIENTMETRICS NonClientMetrics;
-
-    pPreviewData->clrScrollbar = GetSysColor(COLOR_SCROLLBAR);
-    pPreviewData->hbrScrollbar = CreateSolidBrush(pPreviewData->clrScrollbar);
-
-    pPreviewData->clrDesktop = GetSysColor(COLOR_DESKTOP);
-    pPreviewData->hbrDesktop = CreateSolidBrush(pPreviewData->clrDesktop);
-    pPreviewData->clrWindow = GetSysColor(COLOR_WINDOW);
-    pPreviewData->hbrWindow = CreateSolidBrush(pPreviewData->clrWindow);
-
-    pPreviewData->clrActiveCaptionText = GetSysColor(COLOR_CAPTIONTEXT);
-    pPreviewData->clrInactiveCaptionText = GetSysColor(COLOR_INACTIVECAPTIONTEXT);
-    pPreviewData->clrWindowText = GetSysColor(COLOR_WINDOWTEXT);
-    pPreviewData->clrButtonText = GetSysColor(COLOR_BTNTEXT);
-
-    pPreviewData->cxEdge = GetSystemMetrics(SM_CXEDGE);
-    pPreviewData->cyEdge = GetSystemMetrics(SM_CXEDGE);
-
-    pPreviewData->cyCaption = 20; //GetSystemMetrics(SM_CYCAPTION);
-
-    /* load font info */
-    NonClientMetrics.cbSize = sizeof(NONCLIENTMETRICS);
-    SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS),
&NonClientMetrics, 0);
-
-    pPreviewData->lfCaptionFont = NonClientMetrics.lfCaptionFont;
-    pPreviewData->hCaptionFont =
CreateFontIndirect(&pPreviewData->lfCaptionFont);
-
-    pPreviewData->lfMenuFont = NonClientMetrics.lfMenuFont;
-    pPreviewData->hMenuFont = CreateFontIndirect(&pPreviewData->lfMenuFont);
-
-    pPreviewData->lfMessageFont = NonClientMetrics.lfMessageFont;
-    pPreviewData->hMessageFont =
CreateFontIndirect(&pPreviewData->lfMessageFont);
-
-    /* Load and modify the menu */
-    pPreviewData->hMenu = LoadMenu(hApplet, MAKEINTRESOURCE(IDR_PREVIEW_MENU));
-    EnableMenuItem(pPreviewData->hMenu, ID_MENU_DISABLED,
-                   MF_BYCOMMAND | MF_DISABLED);
-    HiliteMenuItem(hwnd, pPreviewData->hMenu,
-                   ID_MENU_SELECTED, MF_BYCOMMAND | MF_HILITE);
-
-//    GetMenuItemRect(hwnd, pPreviewData->hMenu,
-//                    ID_MENU_SELECTED, &pPreviewData->rcSelectedMenuItem);
-
-
-    AllocAndLoadString(&pPreviewData->lpInAct, hApplet, IDS_INACTWIN);
-    AllocAndLoadString(&pPreviewData->lpAct, hApplet, IDS_ACTWIN);
-    AllocAndLoadString(&pPreviewData->lpWinTxt, hApplet, IDS_WINTEXT);
-    AllocAndLoadString(&pPreviewData->lpMessBox, hApplet, IDS_MESSBOX);
-    AllocAndLoadString(&pPreviewData->lpMessText, hApplet, IDS_MESSTEXT);
-    AllocAndLoadString(&pPreviewData->lpButText, hApplet, IDS_BUTTEXT);
-}
-
-
-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 inactive caption buttons rectangle */
-    pPreviewData->rcInactiveCaptionButtons.left =
pPreviewData->rcInactiveCaption.right - 2 - 2 - 3 * 16;
-    pPreviewData->rcInactiveCaptionButtons.top =
pPreviewData->rcInactiveCaption.top + 2;
-    pPreviewData->rcInactiveCaptionButtons.right =
pPreviewData->rcInactiveCaption.right - 2;
-    pPreviewData->rcInactiveCaptionButtons.bottom =
pPreviewData->rcInactiveCaption.bottom - 2;
-
-    /* Calculate the active window rectangle */
-    pPreviewData->rcActiveFrame.left = pPreviewData->rcInactiveFrame.left + 3 + 1;
-    pPreviewData->rcActiveFrame.top = pPreviewData->rcInactiveCaption.bottom + 1;
-    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;
-
-    /* Calculate the active caption buttons rectangle */
-    pPreviewData->rcActiveCaptionButtons.left = pPreviewData->rcActiveCaption.right
- 2 - 2 - 3 * 16;
-    pPreviewData->rcActiveCaptionButtons.top = pPreviewData->rcActiveCaption.top +
2;
-    pPreviewData->rcActiveCaptionButtons.right =
pPreviewData->rcActiveCaption.right - 2;
-    pPreviewData->rcActiveCaptionButtons.bottom =
pPreviewData->rcActiveCaption.bottom - 2;
-
-    /* Calculate the active menu bar rectangle */
-    pPreviewData->rcActiveMenuBar.left = pPreviewData->rcActiveFrame.left + 3 + 1;
-    pPreviewData->rcActiveMenuBar.top = pPreviewData->rcActiveCaption.bottom + 1;
-    pPreviewData->rcActiveMenuBar.right = pPreviewData->rcActiveFrame.right - 3 -
1;
-    pPreviewData->rcActiveMenuBar.bottom = pPreviewData->rcActiveMenuBar.top + 20;
-
-    /* Calculate the active client rectangle */
-    pPreviewData->rcActiveClient.left = pPreviewData->rcActiveFrame.left + 3 + 1;
-    pPreviewData->rcActiveClient.top = pPreviewData->rcActiveMenuBar.bottom; // +
1;
-    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 +
1;
-
-    /* Calculate the inactive caption buttons rectangle */
-    pPreviewData->rcDialogCaptionButtons.left = pPreviewData->rcDialogCaption.right
- 2 - 16;
-    pPreviewData->rcDialogCaptionButtons.top = pPreviewData->rcDialogCaption.top +
2;
-    pPreviewData->rcDialogCaptionButtons.right =
pPreviewData->rcDialogCaption.right - 2;
-    pPreviewData->rcDialogCaptionButtons.bottom =
pPreviewData->rcDialogCaption.bottom - 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
-OnPaint(HWND hwnd, PPREVIEW_DATA pPreviewData)
-{
-    PAINTSTRUCT ps;
-    HFONT hOldFont;
-    HDC hdc;
-    RECT rc;
-
-    hdc = BeginPaint(hwnd, &ps);
-
-    /* Desktop */
-    FillRect(hdc, &pPreviewData->rcDesktop, pPreviewData->hbrDesktop);
-
-    /* Inactive Window */
-    DrawEdge(hdc, &pPreviewData->rcInactiveFrame, EDGE_RAISED, BF_RECT |
BF_MIDDLE);
-    SetTextColor(hdc, pPreviewData->clrInactiveCaptionText);
-    DrawCaptionTemp(NULL, hdc, &pPreviewData->rcInactiveCaption,
pPreviewData->hCaptionFont,
-                    NULL, pPreviewData->lpInAct, DC_GRADIENT | DC_ICON | DC_TEXT);
-    DrawCaptionButtons(hdc, &pPreviewData->rcInactiveCaption, TRUE);
-
-    /* Active Window */
-    DrawEdge(hdc, &pPreviewData->rcActiveFrame, EDGE_RAISED, BF_RECT | BF_MIDDLE);
-    SetTextColor(hdc, pPreviewData->clrActiveCaptionText);
-    DrawCaptionTemp(NULL, hdc, &pPreviewData->rcActiveCaption,
pPreviewData->hCaptionFont,
-                    NULL, pPreviewData->lpAct, DC_ACTIVE | DC_GRADIENT | DC_ICON |
DC_TEXT);
-    DrawCaptionButtons(hdc, &pPreviewData->rcActiveCaption, TRUE);
-
-    /* FIXME: Draw the menu bar */
-    DrawMenuBarTemp(hwnd, hdc, &pPreviewData->rcActiveMenuBar,
-                    pPreviewData->hMenu /*HMENU hMenu*/,
-                    pPreviewData->hMessageFont /*HFONT hFont*/);
-
-    /* Draw the client area */
-    CopyRect(&rc, &pPreviewData->rcActiveClient);
-    DrawEdge(hdc, &rc, EDGE_SUNKEN, BF_RECT | BF_ADJUST);
-    FillRect(hdc, &rc, pPreviewData->hbrWindow);
-
-    /* Draw the client text */
-    CopyRect(&rc, &pPreviewData->rcActiveClient);
-    rc.left += 4;
-    rc.top += 2;
-    SetTextColor(hdc, pPreviewData->clrWindowText);
-    hOldFont = SelectObject(hdc, pPreviewData->hMessageFont);
-    DrawText(hdc, pPreviewData->lpWinTxt, lstrlen(pPreviewData->lpWinTxt), &rc,
DT_LEFT);
-    SelectObject(hdc, hOldFont);
-
-    /* Draw the scroll bar */
-    DrawScrollbar(hdc, &pPreviewData->rcActiveScroll,
pPreviewData->hbrScrollbar);
-
-    /* Dialog Window */
-    DrawEdge(hdc, &pPreviewData->rcDialogFrame, EDGE_RAISED, BF_RECT | BF_MIDDLE);
-    SetTextColor(hdc, pPreviewData->clrActiveCaptionText);
-    DrawCaptionTemp(NULL, hdc, &pPreviewData->rcDialogCaption,
pPreviewData->hCaptionFont,
-                    NULL, pPreviewData->lpMessBox, DC_ACTIVE | DC_GRADIENT | DC_ICON |
DC_TEXT);
-    DrawCaptionButtons(hdc, &pPreviewData->rcDialogCaption, FALSE);
-
-    /* Draw the dialog text */
-    CopyRect(&rc, &pPreviewData->rcDialogClient);
-    rc.left += 4;
-    rc.top += 2;
-    SetTextColor(hdc, RGB(0,0,0));
-    hOldFont = SelectObject(hdc, pPreviewData->hMessageFont);
-    DrawText(hdc, pPreviewData->lpMessText, lstrlen(pPreviewData->lpMessText),
&rc, DT_LEFT);
-    SelectObject(hdc, hOldFont);
-
-    /* Draw Button */
-    DrawFrameControl(hdc, &pPreviewData->rcDialogButton, DFC_BUTTON,
DFCS_BUTTONPUSH);
-    CopyRect(&rc, &pPreviewData->rcDialogButton);
-    SetTextColor(hdc, pPreviewData->clrButtonText);
-    hOldFont = SelectObject(hdc, pPreviewData->hMessageFont);
-    DrawText(hdc, pPreviewData->lpButText, lstrlen(pPreviewData->lpButText),
&rc, DT_VCENTER | DT_CENTER | DT_SINGLELINE);
-    SelectObject(hdc, hOldFont);
-
-    EndPaint(hwnd, &ps);
-}
-
-
-static VOID
-OnLButtonDown(HWND hwnd, int xPos, int yPos, PPREVIEW_DATA pPreviewData)
-{
-    UINT type = IDX_DESKTOP;
-    POINT pt;
-
-    pt.x = xPos;
-    pt.y = yPos;
-
-    if (PtInRect(&pPreviewData->rcInactiveFrame, pt))
-        type = IDX_INACTIVE_BORDER;
-
-    if (PtInRect(&pPreviewData->rcInactiveCaption, pt))
-        type = IDX_INACTIVE_CAPTION;
-
-    if (PtInRect(&pPreviewData->rcInactiveCaptionButtons, pt))
-        type = IDX_CAPTION_BUTTON;
-
-    if (PtInRect(&pPreviewData->rcActiveFrame, pt))
-        type = IDX_ACTIVE_BORDER;
-
-    if (PtInRect(&pPreviewData->rcActiveCaption, pt))
-        type = IDX_ACTIVE_CAPTION;
-
-    if (PtInRect(&pPreviewData->rcActiveCaptionButtons, pt))
-        type = IDX_CAPTION_BUTTON;
-
-    if (PtInRect(&pPreviewData->rcActiveMenuBar, pt))
-        type = IDX_MENU;
-
-//    if (PtInRect(&pPreviewData->rcSelectedMenuItem, pt))
-//        type = IDX_SELECTION;
-
-    if (PtInRect(&pPreviewData->rcActiveClient, pt))
-        type = IDX_WINDOW;
-
-    if (PtInRect(&pPreviewData->rcActiveScroll, pt))
-        type = IDX_SCROLLBAR;
-
-    if (PtInRect(&pPreviewData->rcDialogFrame, pt))
-        type = IDX_DIALOG;
-
-    if (PtInRect(&pPreviewData->rcDialogCaption, pt))
-        type = IDX_ACTIVE_CAPTION;
-
-    if (PtInRect(&pPreviewData->rcDialogCaptionButtons, pt))
-        type = IDX_CAPTION_BUTTON;
-
-    if (PtInRect(&pPreviewData->rcDialogButton, pt))
-        type = IDX_3D_OBJECTS;
-
-    SendMessage(GetParent(hwnd), WM_USER, 0, type);
-}
-
-
-static VOID
-OnDestroy(PPREVIEW_DATA pPreviewData)
-{
-    DeleteObject(pPreviewData->hbrScrollbar);
-    DeleteObject(pPreviewData->hbrDesktop);
-    DeleteObject(pPreviewData->hbrWindow);
-
-    DeleteObject(pPreviewData->hCaptionFont);
-    DeleteObject(pPreviewData->hMenuFont);
-    DeleteObject(pPreviewData->hMessageFont);
-
-    DestroyMenu(pPreviewData->hMenu);
-
-    LocalFree((HLOCAL)pPreviewData->lpInAct);
-    LocalFree((HLOCAL)pPreviewData->lpAct);
-    LocalFree((HLOCAL)pPreviewData->lpWinTxt);
-    LocalFree((HLOCAL)pPreviewData->lpMessBox);
-    LocalFree((HLOCAL)pPreviewData->lpMessText);
-    LocalFree((HLOCAL)pPreviewData->lpButText);
-}
-
-
-static LRESULT CALLBACK
-PreviewWndProc(HWND hwnd,
-               UINT uMsg,
-               WPARAM wParam,
-               LPARAM lParam)
-{
-    PPREVIEW_DATA pPreviewData;
-
-    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)
-                return -1;
-
-            SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)pPreviewData);
-            OnCreate(hwnd, pPreviewData);
-            break;
-
-        case WM_SIZE:
-            OnSize(LOWORD(lParam), HIWORD(lParam), pPreviewData);
-            break;
-
-        case WM_PAINT:
-            OnPaint(hwnd, pPreviewData);
-            break;
-
-        case WM_LBUTTONDOWN:
-            OnLButtonDown(hwnd, LOWORD(lParam), HIWORD(lParam), pPreviewData);
-            break;
-
-        case WM_DESTROY:
-            OnDestroy(pPreviewData);
-            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);
-}
+/*
+ * 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, 2007 Eric Kohl
+ */
+
+#include "desk.h"
+#include "preview.h"
+
+static const TCHAR szPreviewWndClass[] = TEXT("PreviewWndClass");
+
+typedef struct _PREVIEW_DATA
+{
+    HWND hwndParent;
+
+    DWORD clrDesktop;
+    HBRUSH hbrDesktop;
+
+    DWORD clrWindow;
+    HBRUSH hbrWindow;
+
+    DWORD clrScrollbar;
+    HBRUSH hbrScrollbar;
+
+    DWORD clrActiveCaptionText;
+    DWORD clrInactiveCaptionText;
+    DWORD clrWindowText;
+    DWORD clrButtonText;
+
+    INT cxEdge;
+    INT cyEdge;
+
+    INT cyCaption;
+
+    RECT rcDesktop;
+    RECT rcInactiveFrame;
+    RECT rcInactiveCaption;
+    RECT rcInactiveCaptionButtons;
+
+    RECT rcActiveFrame;
+    RECT rcActiveCaption;
+    RECT rcActiveCaptionButtons;
+    RECT rcActiveMenuBar;
+    RECT rcSelectedMenuItem;
+    RECT rcActiveClient;
+    RECT rcActiveScroll;
+
+    RECT rcDialogFrame;
+    RECT rcDialogCaption;
+    RECT rcDialogCaptionButtons;
+    RECT rcDialogClient;
+
+    RECT rcDialogButton;
+
+    LPTSTR lpInAct;
+    LPTSTR lpAct;
+    LPTSTR lpWinTxt;
+    LPTSTR lpMessBox;
+    LPTSTR lpMessText;
+    LPTSTR lpButText;
+
+    LOGFONT lfCaptionFont;
+    LOGFONT lfMenuFont;
+    LOGFONT lfMessageFont;
+
+    HFONT hCaptionFont;
+    HFONT hMenuFont;
+    HFONT hMessageFont;
+
+    HMENU hMenu;
+
+} 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
+DrawScrollbar(HDC hdc, LPRECT rc, HBRUSH hbrScrollbar)
+{
+    RECT rcTop;
+    RECT rcBottom;
+    RECT rcMiddle;
+    int width;
+
+    width = rc->right - rc->left;
+
+    rcTop.left = rc->left;
+    rcTop.right = rc->right;
+    rcTop.top = rc->top;
+    rcTop.bottom = rc->top + width;
+
+    rcMiddle.left = rc->left;
+    rcMiddle.right = rc->right;
+    rcMiddle.top = rc->top + width;
+    rcMiddle.bottom = rc->bottom - width;
+
+    rcBottom.left = rc->left;
+    rcBottom.right = rc->right;
+    rcBottom.top = rc->bottom - width;
+    rcBottom.bottom = rc->bottom;
+
+    DrawFrameControl(hdc, &rcTop, DFC_SCROLL, DFCS_SCROLLUP);
+    DrawFrameControl(hdc, &rcBottom, DFC_SCROLL, DFCS_SCROLLDOWN);
+
+    FillRect(hdc, &rcMiddle, hbrScrollbar);
+}
+
+
+static VOID
+OnCreate(HWND hwnd, PPREVIEW_DATA pPreviewData)
+{
+    NONCLIENTMETRICS NonClientMetrics;
+
+    pPreviewData->clrScrollbar = GetSysColor(COLOR_SCROLLBAR);
+    pPreviewData->hbrScrollbar = CreateSolidBrush(pPreviewData->clrScrollbar);
+
+    pPreviewData->clrDesktop = GetSysColor(COLOR_DESKTOP);
+    pPreviewData->hbrDesktop = CreateSolidBrush(pPreviewData->clrDesktop);
+    pPreviewData->clrWindow = GetSysColor(COLOR_WINDOW);
+    pPreviewData->hbrWindow = CreateSolidBrush(pPreviewData->clrWindow);
+
+    pPreviewData->clrActiveCaptionText = GetSysColor(COLOR_CAPTIONTEXT);
+    pPreviewData->clrInactiveCaptionText = GetSysColor(COLOR_INACTIVECAPTIONTEXT);
+    pPreviewData->clrWindowText = GetSysColor(COLOR_WINDOWTEXT);
+    pPreviewData->clrButtonText = GetSysColor(COLOR_BTNTEXT);
+
+    pPreviewData->cxEdge = GetSystemMetrics(SM_CXEDGE);
+    pPreviewData->cyEdge = GetSystemMetrics(SM_CXEDGE);
+
+    pPreviewData->cyCaption = 20; //GetSystemMetrics(SM_CYCAPTION);
+
+    /* load font info */
+    NonClientMetrics.cbSize = sizeof(NONCLIENTMETRICS);
+    SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS),
&NonClientMetrics, 0);
+
+    pPreviewData->lfCaptionFont = NonClientMetrics.lfCaptionFont;
+    pPreviewData->hCaptionFont =
CreateFontIndirect(&pPreviewData->lfCaptionFont);
+
+    pPreviewData->lfMenuFont = NonClientMetrics.lfMenuFont;
+    pPreviewData->hMenuFont = CreateFontIndirect(&pPreviewData->lfMenuFont);
+
+    pPreviewData->lfMessageFont = NonClientMetrics.lfMessageFont;
+    pPreviewData->hMessageFont =
CreateFontIndirect(&pPreviewData->lfMessageFont);
+
+    /* Load and modify the menu */
+    pPreviewData->hMenu = LoadMenu(hApplet, MAKEINTRESOURCE(IDR_PREVIEW_MENU));
+    EnableMenuItem(pPreviewData->hMenu, ID_MENU_DISABLED,
+                   MF_BYCOMMAND | MF_DISABLED);
+    HiliteMenuItem(hwnd, pPreviewData->hMenu,
+                   ID_MENU_SELECTED, MF_BYCOMMAND | MF_HILITE);
+
+//    GetMenuItemRect(hwnd, pPreviewData->hMenu,
+//                    ID_MENU_SELECTED, &pPreviewData->rcSelectedMenuItem);
+
+
+    AllocAndLoadString(&pPreviewData->lpInAct, hApplet, IDS_INACTWIN);
+    AllocAndLoadString(&pPreviewData->lpAct, hApplet, IDS_ACTWIN);
+    AllocAndLoadString(&pPreviewData->lpWinTxt, hApplet, IDS_WINTEXT);
+    AllocAndLoadString(&pPreviewData->lpMessBox, hApplet, IDS_MESSBOX);
+    AllocAndLoadString(&pPreviewData->lpMessText, hApplet, IDS_MESSTEXT);
+    AllocAndLoadString(&pPreviewData->lpButText, hApplet, IDS_BUTTEXT);
+}
+
+
+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 inactive caption buttons rectangle */
+    pPreviewData->rcInactiveCaptionButtons.left =
pPreviewData->rcInactiveCaption.right - 2 - 2 - 3 * 16;
+    pPreviewData->rcInactiveCaptionButtons.top =
pPreviewData->rcInactiveCaption.top + 2;
+    pPreviewData->rcInactiveCaptionButtons.right =
pPreviewData->rcInactiveCaption.right - 2;
+    pPreviewData->rcInactiveCaptionButtons.bottom =
pPreviewData->rcInactiveCaption.bottom - 2;
+
+    /* Calculate the active window rectangle */
+    pPreviewData->rcActiveFrame.left = pPreviewData->rcInactiveFrame.left + 3 + 1;
+    pPreviewData->rcActiveFrame.top = pPreviewData->rcInactiveCaption.bottom + 1;
+    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;
+
+    /* Calculate the active caption buttons rectangle */
+    pPreviewData->rcActiveCaptionButtons.left = pPreviewData->rcActiveCaption.right
- 2 - 2 - 3 * 16;
+    pPreviewData->rcActiveCaptionButtons.top = pPreviewData->rcActiveCaption.top +
2;
+    pPreviewData->rcActiveCaptionButtons.right =
pPreviewData->rcActiveCaption.right - 2;
+    pPreviewData->rcActiveCaptionButtons.bottom =
pPreviewData->rcActiveCaption.bottom - 2;
+
+    /* Calculate the active menu bar rectangle */
+    pPreviewData->rcActiveMenuBar.left = pPreviewData->rcActiveFrame.left + 3 + 1;
+    pPreviewData->rcActiveMenuBar.top = pPreviewData->rcActiveCaption.bottom + 1;
+    pPreviewData->rcActiveMenuBar.right = pPreviewData->rcActiveFrame.right - 3 -
1;
+    pPreviewData->rcActiveMenuBar.bottom = pPreviewData->rcActiveMenuBar.top + 20;
+
+    /* Calculate the active client rectangle */
+    pPreviewData->rcActiveClient.left = pPreviewData->rcActiveFrame.left + 3 + 1;
+    pPreviewData->rcActiveClient.top = pPreviewData->rcActiveMenuBar.bottom; // +
1;
+    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 +
1;
+
+    /* Calculate the inactive caption buttons rectangle */
+    pPreviewData->rcDialogCaptionButtons.left = pPreviewData->rcDialogCaption.right
- 2 - 16;
+    pPreviewData->rcDialogCaptionButtons.top = pPreviewData->rcDialogCaption.top +
2;
+    pPreviewData->rcDialogCaptionButtons.right =
pPreviewData->rcDialogCaption.right - 2;
+    pPreviewData->rcDialogCaptionButtons.bottom =
pPreviewData->rcDialogCaption.bottom - 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
+OnPaint(HWND hwnd, PPREVIEW_DATA pPreviewData)
+{
+    PAINTSTRUCT ps;
+    HFONT hOldFont;
+    HDC hdc;
+    RECT rc;
+
+    hdc = BeginPaint(hwnd, &ps);
+
+    /* Desktop */
+    FillRect(hdc, &pPreviewData->rcDesktop, pPreviewData->hbrDesktop);
+
+    /* Inactive Window */
+    DrawEdge(hdc, &pPreviewData->rcInactiveFrame, EDGE_RAISED, BF_RECT |
BF_MIDDLE);
+    SetTextColor(hdc, pPreviewData->clrInactiveCaptionText);
+    DrawCaptionTemp(NULL, hdc, &pPreviewData->rcInactiveCaption,
pPreviewData->hCaptionFont,
+                    NULL, pPreviewData->lpInAct, DC_GRADIENT | DC_ICON | DC_TEXT);
+    DrawCaptionButtons(hdc, &pPreviewData->rcInactiveCaption, TRUE);
+
+    /* Active Window */
+    DrawEdge(hdc, &pPreviewData->rcActiveFrame, EDGE_RAISED, BF_RECT | BF_MIDDLE);
+    SetTextColor(hdc, pPreviewData->clrActiveCaptionText);
+    DrawCaptionTemp(NULL, hdc, &pPreviewData->rcActiveCaption,
pPreviewData->hCaptionFont,
+                    NULL, pPreviewData->lpAct, DC_ACTIVE | DC_GRADIENT | DC_ICON |
DC_TEXT);
+    DrawCaptionButtons(hdc, &pPreviewData->rcActiveCaption, TRUE);
+
+    /* FIXME: Draw the menu bar */
+    DrawMenuBarTemp(hwnd, hdc, &pPreviewData->rcActiveMenuBar,
+                    pPreviewData->hMenu /*HMENU hMenu*/,
+                    pPreviewData->hMessageFont /*HFONT hFont*/);
+
+    /* Draw the client area */
+    CopyRect(&rc, &pPreviewData->rcActiveClient);
+    DrawEdge(hdc, &rc, EDGE_SUNKEN, BF_RECT | BF_ADJUST);
+    FillRect(hdc, &rc, pPreviewData->hbrWindow);
+
+    /* Draw the client text */
+    CopyRect(&rc, &pPreviewData->rcActiveClient);
+    rc.left += 4;
+    rc.top += 2;
+    SetTextColor(hdc, pPreviewData->clrWindowText);
+    hOldFont = SelectObject(hdc, pPreviewData->hMessageFont);
+    DrawText(hdc, pPreviewData->lpWinTxt, lstrlen(pPreviewData->lpWinTxt), &rc,
DT_LEFT);
+    SelectObject(hdc, hOldFont);
+
+    /* Draw the scroll bar */
+    DrawScrollbar(hdc, &pPreviewData->rcActiveScroll,
pPreviewData->hbrScrollbar);
+
+    /* Dialog Window */
+    DrawEdge(hdc, &pPreviewData->rcDialogFrame, EDGE_RAISED, BF_RECT | BF_MIDDLE);
+    SetTextColor(hdc, pPreviewData->clrActiveCaptionText);
+    DrawCaptionTemp(NULL, hdc, &pPreviewData->rcDialogCaption,
pPreviewData->hCaptionFont,
+                    NULL, pPreviewData->lpMessBox, DC_ACTIVE | DC_GRADIENT | DC_ICON |
DC_TEXT);
+    DrawCaptionButtons(hdc, &pPreviewData->rcDialogCaption, FALSE);
+
+    /* Draw the dialog text */
+    CopyRect(&rc, &pPreviewData->rcDialogClient);
+    rc.left += 4;
+    rc.top += 2;
+    SetTextColor(hdc, RGB(0,0,0));
+    hOldFont = SelectObject(hdc, pPreviewData->hMessageFont);
+    DrawText(hdc, pPreviewData->lpMessText, lstrlen(pPreviewData->lpMessText),
&rc, DT_LEFT);
+    SelectObject(hdc, hOldFont);
+
+    /* Draw Button */
+    DrawFrameControl(hdc, &pPreviewData->rcDialogButton, DFC_BUTTON,
DFCS_BUTTONPUSH);
+    CopyRect(&rc, &pPreviewData->rcDialogButton);
+    SetTextColor(hdc, pPreviewData->clrButtonText);
+    hOldFont = SelectObject(hdc, pPreviewData->hMessageFont);
+    DrawText(hdc, pPreviewData->lpButText, lstrlen(pPreviewData->lpButText),
&rc, DT_VCENTER | DT_CENTER | DT_SINGLELINE);
+    SelectObject(hdc, hOldFont);
+
+    EndPaint(hwnd, &ps);
+}
+
+
+static VOID
+OnLButtonDown(HWND hwnd, int xPos, int yPos, PPREVIEW_DATA pPreviewData)
+{
+    UINT type = IDX_DESKTOP;
+    POINT pt;
+
+    pt.x = xPos;
+    pt.y = yPos;
+
+    if (PtInRect(&pPreviewData->rcInactiveFrame, pt))
+        type = IDX_INACTIVE_BORDER;
+
+    if (PtInRect(&pPreviewData->rcInactiveCaption, pt))
+        type = IDX_INACTIVE_CAPTION;
+
+    if (PtInRect(&pPreviewData->rcInactiveCaptionButtons, pt))
+        type = IDX_CAPTION_BUTTON;
+
+    if (PtInRect(&pPreviewData->rcActiveFrame, pt))
+        type = IDX_ACTIVE_BORDER;
+
+    if (PtInRect(&pPreviewData->rcActiveCaption, pt))
+        type = IDX_ACTIVE_CAPTION;
+
+    if (PtInRect(&pPreviewData->rcActiveCaptionButtons, pt))
+        type = IDX_CAPTION_BUTTON;
+
+    if (PtInRect(&pPreviewData->rcActiveMenuBar, pt))
+        type = IDX_MENU;
+
+//    if (PtInRect(&pPreviewData->rcSelectedMenuItem, pt))
+//        type = IDX_SELECTION;
+
+    if (PtInRect(&pPreviewData->rcActiveClient, pt))
+        type = IDX_WINDOW;
+
+    if (PtInRect(&pPreviewData->rcActiveScroll, pt))
+        type = IDX_SCROLLBAR;
+
+    if (PtInRect(&pPreviewData->rcDialogFrame, pt))
+        type = IDX_DIALOG;
+
+    if (PtInRect(&pPreviewData->rcDialogCaption, pt))
+        type = IDX_ACTIVE_CAPTION;
+
+    if (PtInRect(&pPreviewData->rcDialogCaptionButtons, pt))
+        type = IDX_CAPTION_BUTTON;
+
+    if (PtInRect(&pPreviewData->rcDialogButton, pt))
+        type = IDX_3D_OBJECTS;
+
+    SendMessage(GetParent(hwnd), WM_USER, 0, type);
+}
+
+
+static VOID
+OnDestroy(PPREVIEW_DATA pPreviewData)
+{
+    DeleteObject(pPreviewData->hbrScrollbar);
+    DeleteObject(pPreviewData->hbrDesktop);
+    DeleteObject(pPreviewData->hbrWindow);
+
+    DeleteObject(pPreviewData->hCaptionFont);
+    DeleteObject(pPreviewData->hMenuFont);
+    DeleteObject(pPreviewData->hMessageFont);
+
+    DestroyMenu(pPreviewData->hMenu);
+
+    LocalFree((HLOCAL)pPreviewData->lpInAct);
+    LocalFree((HLOCAL)pPreviewData->lpAct);
+    LocalFree((HLOCAL)pPreviewData->lpWinTxt);
+    LocalFree((HLOCAL)pPreviewData->lpMessBox);
+    LocalFree((HLOCAL)pPreviewData->lpMessText);
+    LocalFree((HLOCAL)pPreviewData->lpButText);
+}
+
+
+static LRESULT CALLBACK
+PreviewWndProc(HWND hwnd,
+               UINT uMsg,
+               WPARAM wParam,
+               LPARAM lParam)
+{
+    PPREVIEW_DATA pPreviewData;
+
+    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)
+                return -1;
+
+            SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)pPreviewData);
+            OnCreate(hwnd, pPreviewData);
+            break;
+
+        case WM_SIZE:
+            OnSize(LOWORD(lParam), HIWORD(lParam), pPreviewData);
+            break;
+
+        case WM_PAINT:
+            OnPaint(hwnd, pPreviewData);
+            break;
+
+        case WM_LBUTTONDOWN:
+            OnLButtonDown(hwnd, LOWORD(lParam), HIWORD(lParam), pPreviewData);
+            break;
+
+        case WM_DESTROY:
+            OnDestroy(pPreviewData);
+            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);
+}
Propchange: trunk/reactos/dll/cpl/desk/preview.c
------------------------------------------------------------------------------
    svn:eol-style = native
Propchange: trunk/reactos/dll/cpl/desk/preview.c
------------------------------------------------------------------------------
    svn:keywords = author date id revision
Modified: trunk/reactos/dll/cpl/desk/preview.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/desk/preview.h?rev…
==============================================================================
--- trunk/reactos/dll/cpl/desk/preview.h (original)
+++ trunk/reactos/dll/cpl/desk/preview.h Sat Jan 27 17:53:18 2007
@@ -1,21 +1,21 @@
-
-#define IDX_3D_OBJECTS        0
-#define IDX_SCROLLBAR         1
-#define IDX_DESKTOP           2
-#define IDX_DIALOG            3
-#define IDX_WINDOW            4
-#define IDX_APPSPACE          5
-#define IDX_SELECTION         6
-#define IDX_MENU              7
-
-#define IDX_QUICKINFO         9
-#define IDX_INACTIVE_BORDER  10
-#define IDX_ACTIVE_BORDER    11
-
-#define IDX_INACTIVE_CAPTION 15
-#define IDX_ACTIVE_CAPTION   16
-#define IDX_CAPTION_BUTTON   17
-
-
-BOOL RegisterPreviewControl(IN HINSTANCE hInstance);
-VOID UnregisterPreviewControl(IN HINSTANCE hInstance);
+
+#define IDX_3D_OBJECTS        0
+#define IDX_SCROLLBAR         1
+#define IDX_DESKTOP           2
+#define IDX_DIALOG            3
+#define IDX_WINDOW            4
+#define IDX_APPSPACE          5
+#define IDX_SELECTION         6
+#define IDX_MENU              7
+
+#define IDX_QUICKINFO         9
+#define IDX_INACTIVE_BORDER  10
+#define IDX_ACTIVE_BORDER    11
+
+#define IDX_INACTIVE_CAPTION 15
+#define IDX_ACTIVE_CAPTION   16
+#define IDX_CAPTION_BUTTON   17
+
+
+BOOL RegisterPreviewControl(IN HINSTANCE hInstance);
+VOID UnregisterPreviewControl(IN HINSTANCE hInstance);
Propchange: trunk/reactos/dll/cpl/desk/preview.h
------------------------------------------------------------------------------
    svn:eol-style = native
Propchange: trunk/reactos/dll/cpl/desk/preview.h
------------------------------------------------------------------------------
    svn:keywords = author date id revision