Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

136 lines
4.7 KiB

/****************************Module*Header******************************\
* Module Name: shrgrodp.c *
* *
* *
* *
* Created: 1989 *
* *
* Copyright (c) 1987 - 1991 Microsoft Corporation *
* *
* A general description of how the module is used goes here. *
* *
* Additional information such as restrictions, limitations, or special *
* algorithms used if they are externally visible or effect proper use *
* of the module. *
\***********************************************************************/
#include <windows.h>
#include "port1632.h"
#include "pbrush.h"
#include "fixedpt.h"
#include "pbserver.h"
extern BOOL clearFlag;
extern HDC pickDC, monoDC;
extern int pickWid, pickHgt;
extern HWND pbrushWnd[];
extern DPPROC DrawProc;
extern DPPROC dpArray[];
extern int theTool;
extern RECT rDirty;
void ShrGroDP(HWND hWnd, UINT code, WPARAM wParam, LONG lParam)
{
HDC paintDC;
int scaleWid, scaleHgt;
RECT scaleRect;
HMENU hMenu;
HCURSOR oldCsr;
BOOL bCancel;
POINT newPt;
LONG2POINT(lParam,newPt);
switch (code) {
case WM_HIDECURSOR:
HideCsr(NULL, hWnd, CROSScsr);
break;
/* initiate rubber banding of scale rect */
case WM_LBUTTONDOWN:
scaleRect.left = scaleRect.right = newPt.x;
scaleRect.top = scaleRect.bottom = newPt.y;
/* get scaled rect from user */
bCancel = (TrackTool(hWnd, DrawShrGroRect, &scaleRect, &wParam,
NULL) == WM_RBUTTONDOWN);
paintDC = GetDisplayDC(hWnd);
if (paintDC) {
DrawShrGroRect(paintDC, &scaleRect, wParam);
NormalizeRect(&scaleRect);
} else
bCancel = TRUE;
/* if bounding rect is empty then just cancel operation */
if (IsRectEmpty(&scaleRect))
bCancel = TRUE;
if (!bCancel) {
scaleWid = scaleRect.right - scaleRect.left;
scaleHgt = scaleRect.bottom - scaleRect.top;
oldCsr = SetCursor(LoadCursor(NULL,IDC_WAIT));
/* If clear flag set then clear pick area */
if (clearFlag)
ClearPickArea();
/* draw what we want to stretch in work buffer */
scaleRect.left += imageView.left;
scaleRect.right += imageView.left;
scaleRect.top += imageView.top;
scaleRect.bottom += imageView.top;
/* Stretch work buffer onto screen */
BitBlt(hdcWork, scaleRect.left, scaleRect.top,
scaleWid, scaleHgt,
hdcWork, scaleRect.left, scaleRect.top,
SRCCOPY);
MaskStretchBlt(hdcWork, scaleRect.left, scaleRect.top,
scaleWid, scaleHgt,
pickDC, monoDC, 0, 0, pickWid, pickHgt);
BitBlt(paintDC, scaleRect.left - imageView.left,
scaleRect.top - imageView.top,
scaleWid, scaleHgt,
hdcWork, scaleRect.left, scaleRect.top,
SRCCOPY);
UnionWithRect(&rDirty,&scaleRect);
if (fOLE)
SendDocChangeMsg(vpdoc, OLE_CHANGED);
UpdFlag(TRUE);
SetCursor(oldCsr);
}
if (paintDC)
ReleaseDC(hWnd, paintDC);
break;
case WM_TERMINATE:
case WM_PICKSG:
EnableOutline(TRUE);
hMenu = GetMenu(pbrushWnd[PARENTid]);
CheckMenuItem(hMenu, PICKsg, MF_UNCHECKED);
ChangeCutCopy(hMenu, MF_ENABLED);
DrawProc = dpArray[theTool];
if (code == WM_TERMINATE)
SendMessage(hWnd, WM_TERMINATE, 0, 0L);
break;
case WM_PICKTILT:
hMenu = GetMenu(pbrushWnd[PARENTid]);
CheckMenuItem(hMenu, PICKsg, MF_UNCHECKED);
CheckMenuItem(hMenu, PICKtilt, MF_CHECKED);
ChangeCutCopy(hMenu, MF_ENABLED);
DrawProc = TiltDP;
break;
}
}