PAINT.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * PAINT.C
  3.  * GizmoBar Version 1.01
  4.  *
  5.  * Contains any code related to GizmoBar visuals, primarily
  6.  * the WM_PAINT handler.
  7.  *
  8.  * Copyright (c)1993-1996 Microsoft Corporation, All Rights Reserved
  9.  *
  10.  * Kraig Brockschmidt, Software Design Engineer
  11.  * Microsoft Systems Developer Relations
  12.  *
  13.  * Internet  :  kraigb@microsoft.com
  14.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  15.  */
  16. #include <windows.h>
  17. #include "gizmoint.h"
  18. //In GIZMO.C
  19. extern TOOLDISPLAYDATA tdd;
  20. /*
  21.  * GizmoBarPaint
  22.  *
  23.  * Purpose:
  24.  *  Handles all WM_PAINT messages for the control and paints either
  25.  *  the entire thing or just one GizmoBar button if pGB->pGizmoPaint
  26.  *  is non-NULL.
  27.  *
  28.  * Parameters:
  29.  *  hWnd            HWND Handle to the control.
  30.  *  pGB             PGIZMOBAR control data pointer.
  31.  *
  32.  * Return Value:
  33.  *  None
  34.  */
  35. void GizmoBarPaint(HWND hWnd, PGIZMOBAR pGB)
  36.     {
  37.     PAINTSTRUCT ps;
  38.     RECT        rc;
  39.     HDC         hDC;
  40.     HBRUSH      hBr=NULL;
  41.     HPEN        hPen=NULL;
  42.     hDC=BeginPaint(hWnd, &ps);
  43.     GetClientRect(hWnd, &rc);
  44.     /*
  45.      * The only part of the frame we need to draw is the bottom line,
  46.      * so we inflate the rectangle such that all other parts are
  47.      * outside the visible region.
  48.      */
  49.     hBr =CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
  50.     if (NULL!=hBr)
  51.         SelectObject(hDC, hBr);
  52.     hPen=CreatePen(PS_SOLID, 1, GetSysColor(COLOR_WINDOWFRAME));
  53.     if (NULL!=hPen)
  54.         SelectObject(hDC, hPen);
  55.     Rectangle(hDC, rc.left-1, rc.top-1, rc.right+1, rc.bottom);
  56.     /*
  57.      * All that we have to do to draw the controls is start through
  58.      * the list, ignoring anything but buttons, and calling BTTNCUR's
  59.      * UIToolButtonDraw for buttons.  Since we don't even have to
  60.      * track positions of things, we can just use an enum.
  61.      */
  62.     GizmoPEnum(&pGB->pGizmos, FEnumPaintGizmos, (DWORD)(LPTSTR)&ps);
  63.     //Clean up
  64.     EndPaint(hWnd, &ps);
  65.     if (NULL!=hBr)
  66.         DeleteObject(hBr);
  67.     if (NULL!=hPen)
  68.         DeleteObject(hPen);
  69.     return;
  70.     }
  71. /*
  72.  * FEnumPaintGizmos
  73.  *
  74.  * Purpose:
  75.  *  Enumeration callback for all the gizmos we know about in order to
  76.  *  draw them.
  77.  *
  78.  * Parameters:
  79.  *  pGizmo          PGIZMO to draw.
  80.  *  iGizmo          UINT index on the GizmoBar of this gizmo.
  81.  *  dw              DWORD extra data passed to GizmoPEnum, in our
  82.  *                  case a pointer to the PAINTSTRUCT.
  83.  *
  84.  * Return Value:
  85.  *  BOOL            TRUE to continue the enumeration, FALSE
  86.  *                  otherwise.
  87.  */
  88. BOOL WINAPI FEnumPaintGizmos(PGIZMO pGizmo, UINT iGizmo, DWORD dw)
  89.     {
  90.     LPPAINTSTRUCT   pps=(LPPAINTSTRUCT)dw;
  91.     RECT            rc, rcI;
  92.     //Only draw those marked for repaint.
  93.     if ((GIZMOTYPE_DRAWN & pGizmo->iType))
  94.         {
  95.         SetRect(&rc, pGizmo->x, pGizmo->y
  96.             , pGizmo->x+pGizmo->dx, pGizmo->y+pGizmo->dy);
  97.         //Only draw gizmos in the repaint area
  98.         if (IntersectRect(&rcI, &rc, &pps->rcPaint))
  99.             {
  100.             UIToolButtonDrawTDD(pps->hdc, pGizmo->x, pGizmo->y
  101.                 , pGizmo->dx, pGizmo->dy, pGizmo->hBmp
  102.                 , pGizmo->cxImage, pGizmo->cyImage, pGizmo->iBmp
  103.                 , (UINT)pGizmo->uState, &tdd);
  104.             }
  105.         }
  106.     return TRUE;
  107.     }