windows-nt/Source/XPSP1/NT/com/oleutest/letest/gizmobar/paint.c
2020-09-26 16:20:57 +08:00

133 lines
3.1 KiB
C

/*
* PAINT.C
* GizmoBar Version 1.00, Win32 version August 1993
*
* Contains any code related to GizmoBar visuals, primarily
* the WM_PAINT handler.
*
* Copyright (c)1993 Microsoft Corporation, All Rights Reserved
*
* Kraig Brockschmidt, Software Design Engineer
* Microsoft Systems Developer Relations
*
* Internet : kraigb@microsoft.com
* Compuserve: >INTERNET:kraigb@microsoft.com
*/
#include <windows.h>
#include "gizmoint.h"
//In GIZMO.C
extern TOOLDISPLAYDATA tdd;
/*
* GizmoBarPaint
*
* Purpose:
* Handles all WM_PAINT messages for the control and paints either the
* entire thing or just one GizmoBar button if pGB->pGizmoPaint is non-NULL.
*
* Parameters:
* hWnd HWND Handle to the control.
* pGB LPGIZMOBAR control data pointer.
*
* Return Value:
* None
*/
void GizmoBarPaint(HWND hWnd, LPGIZMOBAR pGB)
{
PAINTSTRUCT ps;
RECT rc;
HDC hDC;
HBRUSH hBr=NULL;
HPEN hPen=NULL;
hDC=BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rc);
/*
* The only part of the frame we need to draw is the bottom line,
* so we inflate the rectangle such that all other parts are outside
* the visible region.
*/
hBr =CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
if (NULL!=hBr)
SelectObject(hDC, hBr);
hPen=CreatePen(PS_SOLID, 1, GetSysColor(COLOR_WINDOWFRAME));
if (NULL!=hPen)
SelectObject(hDC, hPen);
Rectangle(hDC, rc.left-1, rc.top-1, rc.right+1, rc.bottom);
/*
* All that we have to do to draw the controls is start through the
* list, ignoring anything but buttons, and calling BTTNCUR's
* UIToolButtonDraw for buttons. Since we don't even have to track
* positions of things, we can just use an enum.
*/
GizmoPEnum(&pGB->pGizmos, FEnumPaintGizmos, (DWORD)(LPSTR)&ps);
//Clean up
EndPaint(hWnd, &ps);
if (NULL!=hBr)
DeleteObject(hBr);
if (NULL!=hPen)
DeleteObject(hPen);
return;
}
/*
* FEnumPaintGizmos
*
* Purpose:
* Enumeration callback for all the gizmos we know about in order to
* draw them.
*
* Parameters:
* pGizmo LPGIZMO to draw.
* iGizmo UINT index on the GizmoBar of this gizmo.
* dw DWORD extra data passed to GizmoPEnum, in our case
* a pointer to the PAINTSTRUCT.
*
* Return Value:
* BOOL TRUE to continue the enumeration, FALSE otherwise.
*/
BOOL FAR PASCAL FEnumPaintGizmos(LPGIZMO pGizmo, UINT iGizmo, DWORD dw)
{
LPPAINTSTRUCT pps=(LPPAINTSTRUCT)dw;
RECT rc, rcI;
//Only draw those marked for repaint.
if ((GIZMOTYPE_DRAWN & pGizmo->iType))
{
SetRect(&rc, pGizmo->x, pGizmo->y, pGizmo->x+pGizmo->dx, pGizmo->y+pGizmo->dy);
//Only draw gizmos in the repaint area
if (IntersectRect(&rcI, &rc, &pps->rcPaint))
{
UIToolButtonDrawTDD(pps->hdc, pGizmo->x, pGizmo->y
, pGizmo->dx, pGizmo->dy, pGizmo->hBmp, pGizmo->cxImage
, pGizmo->cyImage, pGizmo->iBmp, (UINT)pGizmo->uState, &tdd);
}
}
return TRUE;
}