133 lines
3.1 KiB
C
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;
|
|
}
|