ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

preview.c
Go to the documentation of this file.
00001 /*
00002  * PROJECT:     ReactOS Desktop Control Panel
00003  * LICENSE:     GPL - See COPYING in the top level directory
00004  * FILE:        dll/cpl/desk/preview.c
00005  * PURPOSE:     Draws the preview control
00006  * COPYRIGHT:   Copyright 2006, 2007 Eric Kohl
00007  */
00008 
00009 #include "desk.h"
00010 
00011 static const TCHAR szPreviewWndClass[] = TEXT("PreviewWndClass");
00012 
00013 typedef struct _PREVIEW_DATA
00014 {
00015     HWND hwndParent;
00016 
00017     COLOR_SCHEME Scheme;
00018 
00019     HBRUSH hbrScrollbar;
00020     HBRUSH hbrDesktop;
00021     HBRUSH hbrWindow;
00022 
00023     INT cxEdge;
00024     INT cyEdge;
00025 
00026     INT cySizeFrame;
00027 
00028     INT cyCaption;
00029     INT cyBorder;
00030     INT cyMenu;
00031     INT cxScrollbar;
00032 
00033     RECT rcDesktop;
00034     RECT rcInactiveFrame;
00035     RECT rcInactiveCaption;
00036     RECT rcInactiveCaptionButtons;
00037 
00038     RECT rcActiveFrame;
00039     RECT rcActiveCaption;
00040     RECT rcActiveCaptionButtons;
00041     RECT rcActiveMenuBar;
00042     RECT rcSelectedMenuItem;
00043     RECT rcActiveClient;
00044     RECT rcActiveScroll;
00045 
00046     RECT rcDialogFrame;
00047     RECT rcDialogCaption;
00048     RECT rcDialogCaptionButtons;
00049     RECT rcDialogClient;
00050 
00051     RECT rcDialogButton;
00052 
00053     LPTSTR lpInAct;
00054     LPTSTR lpAct;
00055     LPTSTR lpWinTxt;
00056     LPTSTR lpMessBox;
00057     LPTSTR lpMessText;
00058     LPTSTR lpButText;
00059 
00060     HFONT hCaptionFont;
00061     HFONT hMenuFont;
00062     HFONT hMessageFont;
00063     HFONT hClientFont;
00064 
00065     HMENU hMenu;
00066 
00067 } PREVIEW_DATA, *PPREVIEW_DATA;
00068 
00069 
00070 static VOID UpdatePreviewTheme(HWND hwnd, PPREVIEW_DATA pPreviewData, COLOR_SCHEME *scheme)
00071 {
00072     if (pPreviewData->hbrScrollbar != NULL)
00073         DeleteObject(pPreviewData->hbrScrollbar);
00074     pPreviewData->hbrScrollbar = CreateSolidBrush(scheme->crColor[COLOR_SCROLLBAR]);
00075     if (pPreviewData->hbrDesktop != NULL)
00076         DeleteObject(pPreviewData->hbrDesktop);
00077 
00078     pPreviewData->hbrDesktop = CreateSolidBrush(scheme->crColor[COLOR_DESKTOP]);
00079     if (pPreviewData->hbrWindow != NULL)
00080         DeleteObject(pPreviewData->hbrWindow);
00081     pPreviewData->hbrWindow = CreateSolidBrush(scheme->crColor[COLOR_WINDOW]);
00082 
00083     pPreviewData->cxEdge = scheme->Size[SIZE_EDGE_X] - 2;        /* SM_CXEDGE */
00084     pPreviewData->cyEdge = scheme->Size[SIZE_EDGE_Y] - 2;        /* SM_CYEDGE */
00085 
00086     pPreviewData->cySizeFrame = scheme->Size[SIZE_FRAME_Y] - 1;  /* SM_CYSIZEFRAME */
00087 
00088     pPreviewData->cyCaption = scheme->Size[SIZE_CAPTION_Y];      /* SM_CYCAPTION */
00089     pPreviewData->cyMenu = scheme->Size[SIZE_MENU_Y];            /* SM_CYMENU */
00090     pPreviewData->cxScrollbar = scheme->Size[SIZE_SCROLL_X];     /* SM_CXVSCROLL */
00091     pPreviewData->cyBorder = scheme->Size[SIZE_BORDER_Y];        /* SM_CYBORDER */
00092 
00093     if (pPreviewData->hCaptionFont != NULL)
00094         DeleteObject(pPreviewData->hCaptionFont);
00095     pPreviewData->hCaptionFont = CreateFontIndirect(&scheme->lfFont[FONT_CAPTION]);
00096 
00097     if (pPreviewData->hMenuFont != NULL)
00098         DeleteObject(pPreviewData->hMenuFont);
00099     pPreviewData->hMenuFont = CreateFontIndirect(&scheme->lfFont[FONT_MENU]);
00100 
00101     if (pPreviewData->hMessageFont != NULL)
00102         DeleteObject(pPreviewData->hMessageFont);
00103     pPreviewData->hMessageFont = CreateFontIndirect(&scheme->lfFont[FONT_DIALOG]);
00104 
00105     pPreviewData->Scheme = *scheme;
00106     InvalidateRect(hwnd, NULL, FALSE);
00107 }
00108 
00109 static VOID
00110 OnCreate(HWND hwnd, PPREVIEW_DATA pPreviewData)
00111 {
00112     COLOR_SCHEME *scheme;
00113 
00114     pPreviewData->hClientFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
00115 
00116     /* Load and modify the menu */
00117     pPreviewData->hMenu = LoadMenu(hApplet, MAKEINTRESOURCE(IDR_PREVIEW_MENU));
00118     EnableMenuItem(pPreviewData->hMenu,
00119                    1, MF_BYPOSITION | MF_GRAYED);
00120     HiliteMenuItem(hwnd, pPreviewData->hMenu,
00121                    2, MF_BYPOSITION | MF_HILITE);
00122 
00123 //    GetMenuItemRect(hwnd, pPreviewData->hMenu,
00124 //                    2, &pPreviewData->rcSelectedMenuItem);
00125 
00126     AllocAndLoadString(&pPreviewData->lpInAct, hApplet, IDS_INACTWIN);
00127     AllocAndLoadString(&pPreviewData->lpAct, hApplet, IDS_ACTWIN);
00128     AllocAndLoadString(&pPreviewData->lpWinTxt, hApplet, IDS_WINTEXT);
00129     AllocAndLoadString(&pPreviewData->lpMessBox, hApplet, IDS_MESSBOX);
00130     AllocAndLoadString(&pPreviewData->lpMessText, hApplet, IDS_MESSTEXT);
00131     AllocAndLoadString(&pPreviewData->lpButText, hApplet, IDS_BUTTEXT);
00132 
00133     scheme = &pPreviewData->Scheme;
00134     LoadCurrentScheme(scheme);
00135 
00136     UpdatePreviewTheme(hwnd, pPreviewData, scheme);
00137 }
00138 
00139 
00140 static VOID
00141 CalculateItemSize(PPREVIEW_DATA pPreviewData)
00142 {
00143     int width, height;
00144 
00145     /* Calculate the inactive window rectangle */
00146     pPreviewData->rcInactiveFrame.left = pPreviewData->rcDesktop.left + 8;
00147     pPreviewData->rcInactiveFrame.top = pPreviewData->rcDesktop.top + 8;
00148     pPreviewData->rcInactiveFrame.right = pPreviewData->rcDesktop.right - 25;
00149     pPreviewData->rcInactiveFrame.bottom = pPreviewData->rcDesktop.bottom - 30;
00150 
00151     /* Calculate the inactive caption rectangle */
00152     pPreviewData->rcInactiveCaption.left = pPreviewData->rcInactiveFrame.left + pPreviewData->cxEdge + pPreviewData->cySizeFrame + 1;
00153     pPreviewData->rcInactiveCaption.top = pPreviewData->rcInactiveFrame.top + pPreviewData->cyEdge + pPreviewData->cySizeFrame + 1;
00154     pPreviewData->rcInactiveCaption.right = pPreviewData->rcInactiveFrame.right - pPreviewData->cxEdge - pPreviewData->cySizeFrame - 1;
00155     pPreviewData->rcInactiveCaption.bottom = pPreviewData->rcInactiveCaption.top + pPreviewData->cyCaption - pPreviewData->cyBorder;
00156 
00157     /* Calculate the inactive caption buttons rectangle */
00158     pPreviewData->rcInactiveCaptionButtons.left = pPreviewData->rcInactiveCaption.right - 2 - 2 - 3 * 16;
00159     pPreviewData->rcInactiveCaptionButtons.top = pPreviewData->rcInactiveCaption.top + 2;
00160     pPreviewData->rcInactiveCaptionButtons.right = pPreviewData->rcInactiveCaption.right - 2;
00161     pPreviewData->rcInactiveCaptionButtons.bottom = pPreviewData->rcInactiveCaption.bottom - 2;
00162 
00163     /* Calculate the active window rectangle */
00164     pPreviewData->rcActiveFrame.left = pPreviewData->rcInactiveFrame.left + 3 + pPreviewData->cySizeFrame;
00165     pPreviewData->rcActiveFrame.top = pPreviewData->rcInactiveCaption.bottom + 1;
00166     pPreviewData->rcActiveFrame.right = pPreviewData->rcDesktop.right - 10;
00167     pPreviewData->rcActiveFrame.bottom = pPreviewData->rcDesktop.bottom - 25;
00168 
00169     /* Calculate the active caption rectangle */
00170     pPreviewData->rcActiveCaption.left = pPreviewData->rcActiveFrame.left + pPreviewData->cxEdge + pPreviewData->cySizeFrame + 1;
00171     pPreviewData->rcActiveCaption.top = pPreviewData->rcActiveFrame.top + pPreviewData->cxEdge + pPreviewData->cySizeFrame + 1;
00172     pPreviewData->rcActiveCaption.right = pPreviewData->rcActiveFrame.right - pPreviewData->cxEdge - pPreviewData->cySizeFrame - 1;
00173     pPreviewData->rcActiveCaption.bottom = pPreviewData->rcActiveCaption.top + pPreviewData->cyCaption - pPreviewData->cyBorder;
00174 
00175     /* Calculate the active caption buttons rectangle */
00176     pPreviewData->rcActiveCaptionButtons.left = pPreviewData->rcActiveCaption.right - 2 - 2 - 3 * 16;
00177     pPreviewData->rcActiveCaptionButtons.top = pPreviewData->rcActiveCaption.top + 2;
00178     pPreviewData->rcActiveCaptionButtons.right = pPreviewData->rcActiveCaption.right - 2;
00179     pPreviewData->rcActiveCaptionButtons.bottom = pPreviewData->rcActiveCaption.bottom - 2;
00180 
00181     /* Calculate the active menu bar rectangle */
00182     pPreviewData->rcActiveMenuBar.left = pPreviewData->rcActiveFrame.left + pPreviewData->cxEdge + pPreviewData->cySizeFrame + 1;
00183     pPreviewData->rcActiveMenuBar.top = pPreviewData->rcActiveCaption.bottom + 1;
00184     pPreviewData->rcActiveMenuBar.right = pPreviewData->rcActiveFrame.right - pPreviewData->cxEdge - pPreviewData->cySizeFrame - 1;
00185     pPreviewData->rcActiveMenuBar.bottom = pPreviewData->rcActiveMenuBar.top + pPreviewData->cyMenu + 1;
00186 
00187     /* Calculate the active client rectangle */
00188     pPreviewData->rcActiveClient.left = pPreviewData->rcActiveFrame.left + pPreviewData->cxEdge + pPreviewData->cySizeFrame + 1;
00189     pPreviewData->rcActiveClient.top = pPreviewData->rcActiveMenuBar.bottom;
00190     pPreviewData->rcActiveClient.right = pPreviewData->rcActiveFrame.right - pPreviewData->cxEdge - pPreviewData->cySizeFrame - 1;
00191     pPreviewData->rcActiveClient.bottom = pPreviewData->rcActiveFrame.bottom - pPreviewData->cyEdge - pPreviewData->cySizeFrame - 1;
00192 
00193     /* Calculate the active scroll rectangle */
00194     pPreviewData->rcActiveScroll.left = pPreviewData->rcActiveClient.right - 2 - pPreviewData->cxScrollbar;
00195     pPreviewData->rcActiveScroll.top = pPreviewData->rcActiveClient.top + 2;
00196     pPreviewData->rcActiveScroll.right = pPreviewData->rcActiveClient.right - 2;
00197     pPreviewData->rcActiveScroll.bottom = pPreviewData->rcActiveClient.bottom - 2;
00198 
00199 
00200     /* Dialog window */
00201     pPreviewData->rcDialogFrame.left = pPreviewData->rcActiveClient.left + 4;
00202     pPreviewData->rcDialogFrame.top = (pPreviewData->rcDesktop.bottom * 60) / 100;
00203     pPreviewData->rcDialogFrame.right = (pPreviewData->rcDesktop.right * 65) / 100;
00204     pPreviewData->rcDialogFrame.bottom = pPreviewData->rcDesktop.bottom - 5;
00205 
00206     /* Calculate the dialog caption rectangle */
00207     pPreviewData->rcDialogCaption.left = pPreviewData->rcDialogFrame.left + 3;
00208     pPreviewData->rcDialogCaption.top = pPreviewData->rcDialogFrame.top + 3;
00209     pPreviewData->rcDialogCaption.right = pPreviewData->rcDialogFrame.right - 3;
00210     pPreviewData->rcDialogCaption.bottom = pPreviewData->rcDialogFrame.top + pPreviewData->cyCaption + 1 + 1;
00211 
00212     /* Calculate the inactive caption buttons rectangle */
00213     pPreviewData->rcDialogCaptionButtons.left = pPreviewData->rcDialogCaption.right - 2 - 16;
00214     pPreviewData->rcDialogCaptionButtons.top = pPreviewData->rcDialogCaption.top + 2;
00215     pPreviewData->rcDialogCaptionButtons.right = pPreviewData->rcDialogCaption.right - 2;
00216     pPreviewData->rcDialogCaptionButtons.bottom = pPreviewData->rcDialogCaption.bottom - 2;
00217 
00218     /* Calculate the dialog client rectangle */
00219     pPreviewData->rcDialogClient.left = pPreviewData->rcDialogFrame.left + 3;
00220     pPreviewData->rcDialogClient.top = pPreviewData->rcDialogCaption.bottom + 1;
00221     pPreviewData->rcDialogClient.right = pPreviewData->rcDialogFrame.right - 3;
00222     pPreviewData->rcDialogClient.bottom = pPreviewData->rcDialogFrame.bottom - 3;
00223 
00224     /* Calculate the dialog button rectangle */
00225     width = 80;
00226     height = 28;
00227 
00228     pPreviewData->rcDialogButton.left =
00229         (pPreviewData->rcDialogClient.right + pPreviewData->rcDialogClient.left - width) / 2;
00230     pPreviewData->rcDialogButton.right = pPreviewData->rcDialogButton.left + width;
00231     pPreviewData->rcDialogButton.bottom = pPreviewData->rcDialogClient.bottom - 2;
00232     pPreviewData->rcDialogButton.top = pPreviewData->rcDialogButton.bottom - height;
00233 }
00234 
00235 
00236 static VOID
00237 OnSize(INT cx, INT cy, PPREVIEW_DATA pPreviewData)
00238 {
00239     /* Get Desktop rectangle */
00240     pPreviewData->rcDesktop.left = 0;
00241     pPreviewData->rcDesktop.top = 0;
00242     pPreviewData->rcDesktop.right = cx;
00243     pPreviewData->rcDesktop.bottom = cy;
00244 
00245     CalculateItemSize(pPreviewData);
00246 }
00247 
00248 static VOID
00249 OnPaint(HWND hwnd, PPREVIEW_DATA pPreviewData)
00250 {
00251     PAINTSTRUCT ps;
00252     HFONT hOldFont;
00253     HDC hdc;
00254     RECT rc;
00255     COLOR_SCHEME *scheme;
00256 
00257     scheme = &pPreviewData->Scheme;
00258 
00259     hdc = BeginPaint(hwnd, &ps);
00260 
00261     /* Desktop */
00262     FillRect(hdc, &pPreviewData->rcDesktop, pPreviewData->hbrDesktop);
00263 
00264     /* Inactive Window */
00265     MyDrawEdge(hdc, &pPreviewData->rcInactiveFrame, EDGE_RAISED, BF_RECT | BF_MIDDLE, scheme);
00266     SetTextColor(hdc, scheme->crColor[COLOR_INACTIVECAPTIONTEXT]);
00267     MyDrawCaptionTemp(NULL, hdc, &pPreviewData->rcInactiveCaption,  pPreviewData->hCaptionFont,
00268                       NULL, pPreviewData->lpInAct, DC_GRADIENT | DC_ICON | DC_TEXT, scheme);
00269     MyDrawCaptionButtons(hdc, &pPreviewData->rcInactiveCaption, TRUE, pPreviewData->cyCaption - 2, scheme);
00270 
00271     /* Active Window */
00272     MyDrawEdge(hdc, &pPreviewData->rcActiveFrame, EDGE_RAISED, BF_RECT | BF_MIDDLE, scheme);
00273     SetTextColor(hdc, scheme->crColor[COLOR_CAPTIONTEXT]);
00274     MyDrawCaptionTemp(NULL, hdc, &pPreviewData->rcActiveCaption, pPreviewData->hCaptionFont,
00275                       NULL, pPreviewData->lpAct, DC_ACTIVE | DC_GRADIENT | DC_ICON | DC_TEXT, scheme);
00276     MyDrawCaptionButtons(hdc, &pPreviewData->rcActiveCaption, TRUE, pPreviewData->cyCaption - 2, scheme);
00277 
00278     /* Draw the menu bar */
00279     MyDrawMenuBarTemp(hwnd, hdc, &pPreviewData->rcActiveMenuBar,
00280                       pPreviewData->hMenu,
00281                       pPreviewData->hMenuFont, scheme);
00282 
00283     /* Draw the client area */
00284     CopyRect(&rc, &pPreviewData->rcActiveClient);
00285     MyDrawEdge(hdc, &rc, EDGE_SUNKEN, BF_RECT | BF_ADJUST, scheme);
00286     FillRect(hdc, &rc, pPreviewData->hbrWindow);
00287 
00288     /* Draw the client text */
00289     CopyRect(&rc, &pPreviewData->rcActiveClient);
00290     rc.left += 4;
00291     rc.top += 2;
00292     SetTextColor(hdc, scheme->crColor[COLOR_WINDOWTEXT]);
00293     hOldFont = SelectObject(hdc, pPreviewData->hClientFont);
00294     DrawText(hdc, pPreviewData->lpWinTxt, -1, &rc, DT_LEFT);
00295     SelectObject(hdc, hOldFont);
00296 
00297     /* Draw the scroll bar */
00298     MyDrawScrollbar(hdc, &pPreviewData->rcActiveScroll, pPreviewData->hbrScrollbar, scheme);
00299 
00300     /* Dialog Window */
00301     MyDrawEdge(hdc, &pPreviewData->rcDialogFrame, EDGE_RAISED, BF_RECT | BF_MIDDLE, scheme);
00302     SetTextColor(hdc, scheme->crColor[COLOR_WINDOW]);
00303     MyDrawCaptionTemp(NULL, hdc, &pPreviewData->rcDialogCaption, pPreviewData->hCaptionFont,
00304                       NULL, pPreviewData->lpMessBox, DC_ACTIVE | DC_GRADIENT | DC_ICON | DC_TEXT, scheme);
00305     MyDrawCaptionButtons(hdc, &pPreviewData->rcDialogCaption, FALSE, pPreviewData->cyCaption - 2, scheme);
00306 
00307     /* Draw the dialog text */
00308     CopyRect(&rc, &pPreviewData->rcDialogClient);
00309     rc.left += 4;
00310     rc.top += 2;
00311     SetTextColor(hdc, scheme->crColor[COLOR_BTNTEXT]);
00312     hOldFont = SelectObject(hdc, pPreviewData->hMessageFont);
00313     DrawText(hdc, pPreviewData->lpMessText, -1, &rc, DT_LEFT);
00314     SelectObject(hdc, hOldFont);
00315 
00316     /* Draw Button */
00317     MyDrawFrameControl(hdc, &pPreviewData->rcDialogButton, DFC_BUTTON, DFCS_BUTTONPUSH, scheme);
00318     CopyRect(&rc, &pPreviewData->rcDialogButton);
00319     SetTextColor(hdc, scheme->crColor[COLOR_BTNTEXT]);
00320     hOldFont = SelectObject(hdc, pPreviewData->hMessageFont);
00321     DrawText(hdc, pPreviewData->lpButText, -1, &rc, DT_VCENTER | DT_CENTER | DT_SINGLELINE);
00322     SelectObject(hdc, hOldFont);
00323 
00324     EndPaint(hwnd, &ps);
00325 }
00326 
00327 
00328 static VOID
00329 OnLButtonDown(HWND hwnd, int xPos, int yPos, PPREVIEW_DATA pPreviewData)
00330 {
00331     UINT type = IDX_DESKTOP;
00332     POINT pt;
00333 
00334     pt.x = xPos;
00335     pt.y = yPos;
00336 
00337     if (PtInRect(&pPreviewData->rcInactiveFrame, pt))
00338         type = IDX_INACTIVE_BORDER;
00339 
00340     if (PtInRect(&pPreviewData->rcInactiveCaption, pt))
00341         type = IDX_INACTIVE_CAPTION;
00342 
00343     if (PtInRect(&pPreviewData->rcInactiveCaptionButtons, pt))
00344         type = IDX_CAPTION_BUTTON;
00345 
00346     if (PtInRect(&pPreviewData->rcActiveFrame, pt))
00347         type = IDX_ACTIVE_BORDER;
00348 
00349     if (PtInRect(&pPreviewData->rcActiveCaption, pt))
00350         type = IDX_ACTIVE_CAPTION;
00351 
00352     if (PtInRect(&pPreviewData->rcActiveCaptionButtons, pt))
00353         type = IDX_CAPTION_BUTTON;
00354 
00355 //    if (PtInRect(&pPreviewData->rcSelectedMenuItem, pt))
00356 //        type = IDX_SELECTION;
00357 
00358     if (PtInRect(&pPreviewData->rcActiveMenuBar, pt))
00359         type = IDX_MENU;
00360 
00361     if (PtInRect(&pPreviewData->rcActiveClient, pt))
00362         type = IDX_WINDOW;
00363 
00364     if (PtInRect(&pPreviewData->rcActiveScroll, pt))
00365         type = IDX_SCROLLBAR;
00366 
00367     if (PtInRect(&pPreviewData->rcDialogFrame, pt))
00368         type = IDX_DIALOG;
00369 
00370     if (PtInRect(&pPreviewData->rcDialogCaption, pt))
00371         type = IDX_ACTIVE_CAPTION;
00372 
00373     if (PtInRect(&pPreviewData->rcDialogCaptionButtons, pt))
00374         type = IDX_CAPTION_BUTTON;
00375 
00376     if (PtInRect(&pPreviewData->rcDialogButton, pt))
00377         type = IDX_3D_OBJECTS;
00378 
00379     SendMessage(GetParent(hwnd),
00380                 WM_COMMAND,
00381                 MAKEWPARAM(GetWindowLongPtrW(hwnd, GWLP_ID), 0),
00382                 (LPARAM)type);
00383 }
00384 
00385 
00386 static VOID
00387 OnDestroy(PPREVIEW_DATA pPreviewData)
00388 {
00389     DeleteObject(pPreviewData->hbrScrollbar);
00390     DeleteObject(pPreviewData->hbrDesktop);
00391     DeleteObject(pPreviewData->hbrWindow);
00392 
00393     DeleteObject(pPreviewData->hCaptionFont);
00394     DeleteObject(pPreviewData->hMenuFont);
00395     DeleteObject(pPreviewData->hMessageFont);
00396 
00397     DestroyMenu(pPreviewData->hMenu);
00398 
00399     LocalFree((HLOCAL)pPreviewData->lpInAct);
00400     LocalFree((HLOCAL)pPreviewData->lpAct);
00401     LocalFree((HLOCAL)pPreviewData->lpWinTxt);
00402     LocalFree((HLOCAL)pPreviewData->lpMessBox);
00403     LocalFree((HLOCAL)pPreviewData->lpMessText);
00404     LocalFree((HLOCAL)pPreviewData->lpButText);
00405 }
00406 
00407 
00408 static LRESULT CALLBACK
00409 PreviewWndProc(HWND hwnd,
00410                UINT uMsg,
00411                WPARAM wParam,
00412                LPARAM lParam)
00413 {
00414     PPREVIEW_DATA pPreviewData;
00415 
00416     pPreviewData = (PPREVIEW_DATA)GetWindowLongPtr(hwnd, GWLP_USERDATA);
00417 
00418     switch (uMsg)
00419     {
00420         case WM_CREATE:
00421             pPreviewData = (PPREVIEW_DATA)HeapAlloc(GetProcessHeap(),
00422                                                     HEAP_ZERO_MEMORY,
00423                                                     sizeof(PREVIEW_DATA));
00424             if (!pPreviewData)
00425                 return -1;
00426 
00427             SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)pPreviewData);
00428             OnCreate(hwnd, pPreviewData);
00429             break;
00430 
00431         case WM_SIZE:
00432             OnSize(LOWORD(lParam), HIWORD(lParam), pPreviewData);
00433             break;
00434 
00435         case WM_PAINT:
00436             OnPaint(hwnd, pPreviewData);
00437             break;
00438 
00439         case WM_LBUTTONDOWN:
00440             OnLButtonDown(hwnd, LOWORD(lParam), HIWORD(lParam), pPreviewData);
00441             break;
00442 
00443         case WM_DESTROY:
00444             OnDestroy(pPreviewData);
00445             HeapFree(GetProcessHeap(), 0, pPreviewData);
00446             break;
00447 
00448         case PVM_GETCYCAPTION:
00449             return pPreviewData->cyCaption;
00450 
00451         case PVM_SETCYCAPTION:
00452             if ((INT)lParam > 0)
00453             {
00454                 pPreviewData->cyCaption = (INT)lParam;
00455                 CalculateItemSize(pPreviewData);
00456                 InvalidateRect(hwnd, NULL, FALSE);
00457             }
00458             break;
00459 
00460         case PVM_GETCYMENU:
00461             return pPreviewData->cyMenu;
00462 
00463         case PVM_SETCYMENU:
00464             if ((INT)lParam > 0)
00465             {
00466                 pPreviewData->cyMenu = (INT)lParam;
00467                 CalculateItemSize(pPreviewData);
00468                 InvalidateRect(hwnd, NULL, FALSE);
00469             }
00470             break;
00471 
00472         case PVM_GETCXSCROLLBAR:
00473             return pPreviewData->cxScrollbar;
00474 
00475         case PVM_SETCXSCROLLBAR:
00476             if ((INT)lParam > 0)
00477             {
00478                 pPreviewData->cxScrollbar = (INT)lParam;
00479                 CalculateItemSize(pPreviewData);
00480                 InvalidateRect(hwnd, NULL, FALSE);
00481             }
00482             break;
00483 
00484         case PVM_GETCYSIZEFRAME:
00485             return pPreviewData->cySizeFrame;
00486 
00487         case PVM_SETCYSIZEFRAME:
00488             if ((INT)lParam > 0)
00489             {
00490                 pPreviewData->cySizeFrame = (INT)lParam;
00491                 CalculateItemSize(pPreviewData);
00492                 InvalidateRect(hwnd, NULL, FALSE);
00493             }
00494             break;
00495 
00496         case PVM_UPDATETHEME:
00497             UpdatePreviewTheme(hwnd, pPreviewData, (COLOR_SCHEME *)lParam);
00498             break;
00499 
00500         default:
00501             return DefWindowProc(hwnd, uMsg, wParam, lParam);
00502     }
00503     return FALSE;
00504 }
00505 
00506 
00507 BOOL
00508 RegisterPreviewControl(IN HINSTANCE hInstance)
00509 {
00510     WNDCLASSEX wc = {0};
00511 
00512     wc.cbSize = sizeof(WNDCLASSEX);
00513     wc.lpfnWndProc = PreviewWndProc;
00514     wc.hInstance = hInstance;
00515     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
00516     wc.hbrBackground = (HBRUSH)NULL;
00517     wc.lpszClassName = szPreviewWndClass;
00518 
00519     return RegisterClassEx(&wc) != (ATOM)0;
00520 }
00521 
00522 
00523 VOID
00524 UnregisterPreviewControl(IN HINSTANCE hInstance)
00525 {
00526     UnregisterClass(szPreviewWndClass, hInstance);
00527 }

Generated on Sat May 26 2012 04:19:44 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.