/****************************Module*Header******************************\ * Copyright (c) 1987 - 1991 Microsoft Corporation * \***********************************************************************/ /******************************************************** * * * file: RectDP.c * * system: PC Paintbrush for MS-Windows * * descr: rect draw proc * * date: 03/16/87 @ 15:15 * ********************************************************/ #include #include #include "oleglue.h" #include "pbrush.h" #define MAXCVPTS 4 extern POINT polyPts[]; extern int theSize, theForeg; extern DWORD *rgbColor; extern BOOL bExchanged; extern RECT rDirty; int Curve(HDC dc, POINT *curvePt, UINT numPts) { REGISTER int i, segs; int count = MAXCVPTS; segs = max(5,(abs(curvePt[0].x - curvePt[1].x) + abs(curvePt[0].y - curvePt[1].y) + abs(curvePt[1].x - curvePt[2].x) + abs(curvePt[1].y - curvePt[2].y)) / 20); curvePt[count++] = curvePt[0]; if(numPts == 3) { for(i=1; iright; polyPts[1].y = lprBounds->bottom; MMoveTo(dstDC, polyPts[0].x, polyPts[0].y); return(LineTo(dstDC, polyPts[1].x, polyPts[1].y)); } else { polyPts[num1Pts-2].x = lprBounds->right; polyPts[num1Pts-2].y = lprBounds->bottom; return(Curve(dstDC, polyPts, num1Pts)); } } void CurveDP(HWND hWnd, UINT message, WPARAM wParam, LONG lParam) { POINT newPt; static BOOL drawing = FALSE; static HDC dstDC = NULL; static int nSavedDC,iBk; static RECT rcReturn; HPEN pen, hOldPen; LONG2POINT(lParam,newPt); switch(message) { case WM_LBUTTONDOWN: if(!drawing) { if(!(dstDC = GetDisplayDC(hWnd))) return; nSavedDC = SaveDC(dstDC); drawing = TRUE; SelectObject(dstDC, GetStockObject(WHITE_PEN)); SetROP2(dstDC, R2_XORPEN); polyPts[0] = newPt; num1Pts = 1; } else { DrawCurve(dstDC, &rcReturn, wParam); } polyPts[num1Pts] = polyPts[num1Pts-1]; polyPts[num1Pts-1] = newPt; ++num1Pts; rcReturn.left = rcReturn.right = newPt.x; rcReturn.top = rcReturn.bottom = newPt.y; if(TrackTool(hWnd, DrawCurve, &rcReturn, &wParam, dstDC) == WM_RBUTTONDOWN) { drawing = FALSE; CurveDP(hWnd, WM_TERMINATE, wParam, lParam); return; } if(num1Pts >= MAXCVPTS) { drawing = FALSE; iBk=SetBkMode(hdcWork, OPAQUE); SetROP2(dstDC, R2_COPYPEN); if(!(pen = CreatePen(PS_INSIDEFRAME, theSize, rgbColor[theForeg]))) goto Error1; hOldPen = SelectObject(hdcWork, pen); DrawCurve(dstDC, &rcReturn, wParam); if (hOldPen) SelectObject(hdcWork, hOldPen); DeleteObject(pen); Error1: CurveDP(hWnd, WM_TERMINATE, wParam, lParam); } else { DrawCurve(dstDC, &rcReturn, wParam); } break; case WM_RBUTTONDOWN: case WM_TERMINATE: if(drawing) { DrawCurve(dstDC, &rcReturn, wParam) != 0; drawing = FALSE; } if(dstDC) { SetBkMode(hdcWork, iBk); RestoreDC(dstDC, nSavedDC); ReleaseDC(hWnd, dstDC); dstDC = NULL; } break; default: break; } }