282 lines
6.5 KiB
C
282 lines
6.5 KiB
C
/************************************************************/
|
||
/* Windows Write, Copyright 1985-1992 Microsoft Corporation */
|
||
/************************************************************/
|
||
|
||
/* clipdisp.c -- Clipboard display routines */
|
||
/* This module only gets called in when the clipboard view window is up */
|
||
|
||
#define NOVIRTUALKEYCODES
|
||
#define NOWINSTYLES
|
||
#define NOGDICAPMASKS
|
||
#define NOSYSMETRICS
|
||
#define NOMENUS
|
||
#define NOCTLMGR
|
||
#include "windows.h"
|
||
|
||
#include "mw.h"
|
||
#include "docdefs.h"
|
||
#include "cmddefs.h"
|
||
#include "str.h"
|
||
#include "propdefs.h"
|
||
#include "editdefs.h"
|
||
#include "winddefs.h"
|
||
#include "dispdefs.h"
|
||
#include "wwdefs.h"
|
||
#if defined(OLE)
|
||
#include "obj.h"
|
||
#endif
|
||
|
||
#define SCRIBBLE
|
||
#include "debug.h"
|
||
|
||
extern int docCur; /* Document in current ww */
|
||
extern int docScrap;
|
||
extern struct WWD rgwwd [];
|
||
|
||
|
||
int NEAR FGetClipboardDC( void );
|
||
int NEAR SetupClipboardDC( void );
|
||
int NEAR ReleaseClipboardDC( void );
|
||
|
||
|
||
MdocPaintClipboard( hWnd, hPS )
|
||
HWND hWnd;
|
||
HANDLE hPS;
|
||
{ /* Paint portion of clipboard window indicated by hPS */
|
||
LPPAINTSTRUCT lpps;
|
||
|
||
if (wwClipboard == wwNil)
|
||
return;
|
||
|
||
/* Must set the scroll bar range each time we get a PAINT message;
|
||
CLIPBRD.EXE resets it when it gets WM_DRAWCLIPBOARD */
|
||
|
||
SetScrollRange( wwdClipboard.wwptr, SB_VERT, 0, drMax-1, FALSE );
|
||
SetScrollRange( wwdClipboard.wwptr, SB_HORZ, 0, xpRightLim, FALSE );
|
||
|
||
if ( (lpps = (LPPAINTSTRUCT)GlobalLock( hPS )) != NULL )
|
||
{ /* Paint the clipboard */
|
||
wwdClipboard.hDC = lpps->hdc;
|
||
SetupClipboardDC();
|
||
NewCurWw( wwClipboard, TRUE );
|
||
InvalBand( &wwdClipboard, lpps->rcPaint.top, lpps->rcPaint.bottom - 1 );
|
||
UpdateWw( wwClipboard, FALSE );
|
||
NewCurWw( wwDocument, TRUE );
|
||
GlobalUnlock( hPS );
|
||
}
|
||
|
||
/* Since the DC is no longer good, we'll set it to NULL */
|
||
wwdClipboard.hDC = NULL;
|
||
|
||
#if 0
|
||
#if defined(OLE)
|
||
/* gotta delete objects loaded from scrap document */
|
||
ObjEnumInDoc(docScrap,ObjDeleteObjectInDoc);
|
||
#endif
|
||
#endif
|
||
}
|
||
|
||
|
||
|
||
|
||
MdocSizeClipboard( hWnd, hRC )
|
||
HWND hWnd;
|
||
HANDLE hRC;
|
||
{ /* Set clipboard window to be the rect in hRC */
|
||
/* If rectangle is 0 units high or wide, this means we're losing the
|
||
necessity for display until the next size message */
|
||
LPRECT lprc;
|
||
int dypRect;
|
||
|
||
if ( (lprc = (LPRECT)GlobalLock( hRC )) == NULL )
|
||
return;
|
||
|
||
if ( (dypRect = lprc->bottom - lprc->top) <= 0 )
|
||
{ /* NULL rect, means lose display until we get a nonnull size */
|
||
if (wwClipboard != wwNil)
|
||
FreeWw( wwClipboard );
|
||
}
|
||
else if ( (wwClipboard != wwNil) ||
|
||
((wwClipboard=WwAlloc( hWnd, docScrap )) != wwNil))
|
||
{ /* Have WWD entry for clipboard, set its size */
|
||
|
||
wwdClipboard.wwptr = hWnd; /* Just in case clipboard
|
||
was closed, then re-opened */
|
||
wwdClipboard.xpMin = lprc->left;
|
||
wwdClipboard.xpMac = lprc->right;
|
||
wwdClipboard.ypMin = lprc->top;
|
||
wwdClipboard.ypMac = lprc->bottom;
|
||
#ifdef WIN30
|
||
SetScrollPos(hWnd, SB_HORZ, 0, TRUE); /* suggested by sankar */
|
||
#endif
|
||
}
|
||
|
||
GlobalUnlock( hRC );
|
||
}
|
||
|
||
|
||
|
||
|
||
MdocVScrollClipboard( hWnd, sbMessage, wNewThumb )
|
||
HWND hWnd;
|
||
int sbMessage;
|
||
int wNewThumb;
|
||
{
|
||
if ( hWnd != wwdClipboard.wwptr || wwClipboard == wwNil)
|
||
{
|
||
Assert( FALSE );
|
||
return;
|
||
}
|
||
|
||
if (!FGetClipboardDC())
|
||
/* Unable to create clipboard device context */
|
||
return;
|
||
|
||
NewCurWw( wwClipboard, TRUE );
|
||
|
||
switch ( sbMessage )
|
||
{
|
||
case SB_THUMBPOSITION:
|
||
{
|
||
extern typeCP cpMacCur;
|
||
|
||
DirtyCache( wwdClipboard.cpFirst = (cpMacCur - wwdClipboard.cpMin) *
|
||
wNewThumb / (drMax - 1) + wwdClipboard.cpMin);
|
||
wwdClipboard.ichCpFirst = 0;
|
||
wwdClipboard.fCpBad = TRUE;
|
||
TrashWw( wwClipboard );
|
||
break;
|
||
}
|
||
|
||
case SB_LINEUP:
|
||
ScrollUpCtr( 1 );
|
||
break;
|
||
case SB_LINEDOWN:
|
||
ScrollDownCtr( 1 );
|
||
break;
|
||
case SB_PAGEUP:
|
||
ScrollUpDypWw();
|
||
break;
|
||
case SB_PAGEDOWN:
|
||
ScrollDownCtr( 100 ); /* 100 > tr's in a page */
|
||
break;
|
||
}
|
||
|
||
UpdateWw( wwClipboard, FALSE );
|
||
|
||
NewCurWw( wwDocument, TRUE ); /* Frees the memory DC */
|
||
ReleaseClipboardDC();
|
||
}
|
||
|
||
|
||
|
||
|
||
MdocHScrollClipboard( hWnd, sbMessage, wNewThumb )
|
||
HWND hWnd;
|
||
int sbMessage;
|
||
int wNewThumb;
|
||
{
|
||
if ( hWnd != wwdClipboard.wwptr || wwClipboard == wwNil)
|
||
{
|
||
Assert( FALSE );
|
||
return;
|
||
}
|
||
|
||
if (!FGetClipboardDC())
|
||
/* Unable to create clipboard device context */
|
||
return;
|
||
|
||
NewCurWw( wwClipboard, TRUE );
|
||
|
||
switch (sbMessage)
|
||
{
|
||
case SB_LINEUP: /* line left */
|
||
ScrollRight(xpMinScroll);
|
||
break;
|
||
case SB_LINEDOWN: /* line right */
|
||
ScrollLeft(xpMinScroll);
|
||
break;
|
||
case SB_PAGEUP: /* page left */
|
||
ScrollRight(wwdClipboard.xpMac - xpSelBar);
|
||
break;
|
||
case SB_PAGEDOWN: /* page right */
|
||
ScrollLeft(wwdClipboard.xpMac - xpSelBar);
|
||
break;
|
||
case SB_THUMBPOSITION:
|
||
/* position to posNew */
|
||
AdjWwHoriz( wNewThumb - wwdClipboard.xpMin );
|
||
break;
|
||
}
|
||
|
||
UpdateWw( wwClipboard, FALSE );
|
||
|
||
NewCurWw( wwDocument, TRUE ); /* Frees the memory DC */
|
||
ReleaseClipboardDC();
|
||
}
|
||
|
||
|
||
|
||
|
||
MdocAskCBFormatName( lpchName, cchNameMax )
|
||
LPCH lpchName;
|
||
int cchNameMax;
|
||
{ /* Copy the format name for the current contents of the clipboard
|
||
(of which we are the owner) to lpchName, copying no more than
|
||
cchNameMax characters */
|
||
|
||
extern int vfOwnClipboard;
|
||
extern int vfScrapIsPic;
|
||
extern CHAR szWRITEText[];
|
||
int cchCopy;
|
||
|
||
Assert( vfOwnClipboard );
|
||
|
||
/* Don't give a format name for pictures; the name is covered by the
|
||
standard types */
|
||
|
||
if (!vfScrapIsPic)
|
||
{
|
||
if ( (cchCopy=CchSz( szWRITEText )) > cchNameMax )
|
||
{
|
||
lpchName[ cchCopy = cchNameMax - 1 ] = '\0';
|
||
}
|
||
|
||
bltbx( (LPSTR)szWRITEText, (LPSTR)lpchName, cchCopy );
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
int NEAR FGetClipboardDC()
|
||
{ /* Get a DC for the clipboard window. Leave it in rgwwd [wwClipboard].
|
||
Call SetupClipboardDC to set up proper colors */
|
||
|
||
if ((wwdClipboard.hDC = GetDC( wwdClipboard.wwptr )) == NULL )
|
||
return FALSE;
|
||
|
||
SetupClipboardDC();
|
||
return TRUE;
|
||
}
|
||
|
||
int NEAR SetupClipboardDC()
|
||
{ /* Select in the background brush for appropriate color behavior. */
|
||
|
||
extern long rgbBkgrnd;
|
||
extern long rgbText;
|
||
extern HBRUSH hbrBkgrnd;
|
||
|
||
SelectObject( wwdClipboard.hDC, hbrBkgrnd );
|
||
SetBkColor( wwdClipboard.hDC, rgbBkgrnd );
|
||
SetTextColor( wwdClipboard.hDC, rgbText );
|
||
}
|
||
|
||
|
||
|
||
int NEAR ReleaseClipboardDC()
|
||
{
|
||
ReleaseDC( wwdClipboard.wwptr, wwdClipboard.hDC );
|
||
wwdClipboard.hDC = NULL; /* Mark clipboard DC as invalid */
|
||
}
|
||
|