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 */
|
|||
|
}
|
|||
|
|