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.
 
 
 
 
 
 

926 lines
21 KiB

#include <platform.h>
#include <string.h>
#include <sccut.h>
#include <sccch.h>
#include <sccvw.h>
#include <sccd.h>
#include <sccfont.h>
#include "oiw.h"
#include "oiwstr.h"
#include "oiw.pro"
#define HILITE_TEXT RGB(255,0,0)
#define HILITE_BACK RGB(255,255,255)
#define HILITE_BACKMODE TRANSPARENT
//extern HANDLE hInst;
extern SOBORDER gNoBorder;
VOID OIWOpenNP(lpWordInfo)
LPOIWORDINFO lpWordInfo;
{
//JKXX SCCFontGetInfo(NULL,gWpOp.szFace,gWpOp.wFaceSize,&gWpOp.sFontInfo);
// lpWordInfo->wiTextColor = RGB(0,0,0);
// lpWordInfo->wiBackColor = RGB(0xff,0xff,0xff);
lpWordInfo->wiTextColor = GetSysColor(COLOR_WINDOWTEXT);
lpWordInfo->wiBackColor = GetSysColor(COLOR_WINDOW);
}
VOID OIWSysColorChangeNP(lpWordInfo)
LPOIWORDINFO lpWordInfo;
{
lpWordInfo->wiTextColor = GetSysColor(COLOR_WINDOWTEXT);
lpWordInfo->wiBackColor = GetSysColor(COLOR_WINDOW);
InvalidateRect( lpWordInfo->wiGen.hWnd, NULL, TRUE);
UpdateWindow (lpWordInfo->wiGen.hWnd);
}
VOID OIWInvertRectNP ( lpWordInfo, lpRect )
LPOIWORDINFO lpWordInfo;
LPRECT lpRect;
{
InvertRect(lpWordInfo->wiGen.hDC, lpRect );
}
SHORT OIWSetLineAttribsNP ( lpWordInfo )
LPOIWORDINFO lpWordInfo;
{
HDC locOutputDC;
COLORREF locTextColor;
COLORREF locBackColor;
locOutputDC = lpWordInfo->wiGen.hDC;
#ifdef SCCFEATURE_PRINT
if ( lpWordInfo->wiFlags & OIWF_PRINTING )
{
locTextColor = RGB(0,0,0); /* black */
locBackColor = RGB(255,255,255); /* white */
}
else
#endif
{
// SelectObject(locOutputDC,lpWordInfo->wiBackBrush);
locTextColor = lpWordInfo->wiTextColor;
locBackColor = lpWordInfo->wiBackColor;
}
SetTextColor(locOutputDC,locTextColor);
SetBkColor(locOutputDC,locBackColor);
SetBkMode(locOutputDC,TRANSPARENT);
SetTextAlign(locOutputDC,TA_LEFT | TA_BASELINE | TA_NOUPDATECP);
SelectObject(locOutputDC,GetStockObject(BLACK_PEN));
return(0);
}
SHORT OIWSetTextAttribsNP ( lpWordInfo, bHilite )
LPOIWORDINFO lpWordInfo;
BOOL bHilite;
{
HDC locOutputDC;
locOutputDC = lpWordInfo->wiGen.hDC;
if ( !lpWordInfo->wiFlags & OIWF_PRINTING )
{
#ifdef SCCFEATURE_HIGHLIGHT
if (bHilite)
{
SetTextColor(locOutputDC,HILITE_TEXT);
SetBkColor(locOutputDC,HILITE_BACK);
SetBkMode(locOutputDC,HILITE_BACKMODE);
}
else
#endif
{
SetTextColor(locOutputDC,lpWordInfo->wiTextColor);
SetBkColor(locOutputDC,lpWordInfo->wiBackColor);
SetBkMode(locOutputDC,TRANSPARENT);
}
}
return(0);
}
SHORT OIWTextOutNP ( lpWordInfo, xPos, yPos, lpStr, wLength )
LPOIWORDINFO lpWordInfo;
SHORT xPos;
SHORT yPos;
LPBYTE lpStr;
WORD wLength;
{
TextOut ( lpWordInfo->wiGen.hDC, xPos, yPos, lpStr, wLength );
return(0);
}
SHORT OIWDefaultLineAttribsNP(lpWordInfo)
LPOIWORDINFO lpWordInfo;
{
SelectObject(lpWordInfo->wiGen.hDC,GetStockObject(SYSTEM_FONT));
return(0);
}
SHORT OIWColorRectNP ( lpWordInfo, RectColor, x, y, nWidth, nHeight )
LPOIWORDINFO lpWordInfo;
SOCOLORREF RectColor;
SHORT x;
SHORT y;
SHORT nHeight;
SHORT nWidth;
{
HBRUSH hBrush, hOldBrush;
HDC hOutputDC;
POINT Pt[2];
hOutputDC = lpWordInfo->wiGen.hDC;
hBrush = CreateSolidBrush ( (COLORREF)RectColor );
hOldBrush = SelectObject ( hOutputDC, hBrush );
/*
If the pattern scales down to 0 width or 0 height then replace by a line
draw command. This is done because a patblt will disappear when scaled
down, a linedraw will give at least one pixel wide or high.
*/
Pt[0].x = Pt[0].y = 0;
Pt[1].x = nWidth;
Pt[1].y = nHeight;
LPtoDP ( hOutputDC, Pt, 2 );
if ( Pt[1].x == Pt[0].x )
{
#ifdef WIN16
MoveTo ( hOutputDC, x, y );
#endif
#ifdef WIN32
MoveToEx ( hOutputDC, x, y, NULL );
#endif
LineTo ( hOutputDC, x, y + nHeight );
}
else if ( Pt[1].y == Pt[0].y )
{
#ifdef WIN16
MoveTo ( hOutputDC, x, y );
#endif
#ifdef WIN32
MoveToEx ( hOutputDC, x, y, NULL );
#endif
LineTo ( hOutputDC, x + nWidth, y );
}
else
PatBlt ( hOutputDC, x, y, nWidth, nHeight, PATCOPY );
SelectObject ( hOutputDC, hOldBrush );
DeleteObject ( hBrush );
return(0);
}
SHORT OIWGridRectNP ( lpWordInfo, x, y, nWidth, nHeight )
LPOIWORDINFO lpWordInfo;
SHORT x;
SHORT y;
SHORT nHeight;
SHORT nWidth;
{
HBRUSH hOldBrush;
HDC hOutputDC;
hOutputDC = lpWordInfo->wiGen.hDC;
hOldBrush = SelectObject ( hOutputDC, lpWordInfo->wiGridBrush );
PatBlt ( hOutputDC, x, y, nWidth, nHeight, PATCOPY );
SelectObject ( hOutputDC, hOldBrush );
return(0);
}
SHORT OIWCreateGridBrush ( lpWordInfo )
LPOIWORDINFO lpWordInfo;
{
LOGBRUSH locLogBrush;
BITMAP locBitMap;
WORD locBits[8];
locBits[0] = 0x5555;
locBits[1] = 0xAAAA;
locBits[2] = 0x5555;
locBits[3] = 0xAAAA;
locBits[4] = 0x5555;
locBits[5] = 0xAAAA;
locBits[6] = 0x5555;
locBits[7] = 0xAAAA;
locBitMap.bmType = 0;
locBitMap.bmWidth = 8;
locBitMap.bmHeight = 8;
locBitMap.bmWidthBytes = 2;
locBitMap.bmPlanes = 1;
locBitMap.bmBitsPixel = 1;
locBitMap.bmBits = (LPSTR) locBits;
locLogBrush.lbStyle = BS_PATTERN;
#ifdef WIN32
locLogBrush.lbHatch = (LONG)CreateBitmapIndirect(&locBitMap);
#else
locLogBrush.lbHatch = (SHORT)CreateBitmapIndirect(&locBitMap);
#endif
lpWordInfo->wiGridBrush = CreateBrushIndirect(&locLogBrush);
DeleteObject((HANDLE)locLogBrush.lbHatch);
return(0);
}
SHORT OIWCloseNP ( lpWordInfo )
LPOIWORDINFO lpWordInfo;
{
if (lpWordInfo->wiGen.hWnd == GetFocus())
{
HideCaret(lpWordInfo->wiGen.hWnd);
DestroyCaret();
}
if (lpWordInfo->wiGridBrush)
DeleteObject(lpWordInfo->wiGridBrush);
return(0);
}
#ifdef SCCFEATURE_WORDDRAG
VOID OIStartWordDrag(lpWordInfo,wX,wY)
LPOIWORDINFO lpWordInfo;
WORD wX;
WORD wY;
{
OIWORDPOS locStartPos;
OIWORDPOS locEndPos;
SHORT locLeftX;
SHORT locRightX;
SHORT locY;
WORD locHeight;
WORD locWidth;
HDC locDC;
if (OIMapWordXyToWord(wX,wY,&locStartPos,&locEndPos,lpWordInfo->wiWordDrag.diWord,lpWordInfo) == SCC_BAD)
{
UTFlagOff(lpWordInfo->wiFlags,OIWF_DRAGGINGWORD);
}
else
{
UTFlagOn(lpWordInfo->wiFlags,OIWF_DRAGGINGWORD);
OIMapWordPosToXy(&locStartPos,&locLeftX,&locY,lpWordInfo);
OIMapWordPosToXy(&locEndPos,&locRightX,&locY,lpWordInfo);
lpWordInfo->wiWordDrag.diOffset.x = wX-locLeftX;
lpWordInfo->wiWordDrag.diOffset.y = wY-locY;
locWidth = locRightX - locLeftX + 2;
/* PJB ???
locHeight = lpWordInfo->wiFontInfo.diFontHeight;
*/
lpWordInfo->wiWordDrag.diSize.x = locWidth;
lpWordInfo->wiWordDrag.diSize.y = locHeight;
lpWordInfo->wiWordDrag.diTopLeft.x = locLeftX-1;
lpWordInfo->wiWordDrag.diTopLeft.y = locY+1;
lpWordInfo->wiWordDrag.diFirst = TRUE;
locDC = GetDC(lpWordInfo->wiGen.hWnd);
SelectObject(locDC,GetStockObject(NULL_BRUSH));
SetROP2(locDC,R2_NOT);
Rectangle(
locDC,
lpWordInfo->wiWordDrag.diTopLeft.x,
lpWordInfo->wiWordDrag.diTopLeft.y,
lpWordInfo->wiWordDrag.diTopLeft.x + lpWordInfo->wiWordDrag.diSize.x,
lpWordInfo->wiWordDrag.diTopLeft.y + lpWordInfo->wiWordDrag.diSize.y);
ReleaseDC(lpWordInfo->wiGen.hWnd,locDC);
locDC = GetDC(NULL);
lpWordInfo->wiWordDrag.diBitmap = CreateCompatibleBitmap(locDC, locWidth, locHeight);
lpWordInfo->wiWordDrag.diDC = CreateCompatibleDC(locDC);
SelectObject(lpWordInfo->wiWordDrag.diDC, lpWordInfo->wiWordDrag.diBitmap);
SelectObject(lpWordInfo->wiWordDrag.diDC, GetStockObject(BLACK_BRUSH));
PatBlt(lpWordInfo->wiWordDrag.diDC, 0, 0, locWidth, locHeight, PATCOPY);
// PJB ??? SelectObject(lpWordInfo->wiWordDrag.diDC,lpWordInfo->wiFontInfo.diFont[0]);
SetTextColor(lpWordInfo->wiWordDrag.diDC, RGB(255,255,0));
SetBkMode(lpWordInfo->wiWordDrag.diDC, TRANSPARENT);
TextOut(lpWordInfo->wiWordDrag.diDC,1,0,lpWordInfo->wiWordDrag.diWord,lstrlen(lpWordInfo->wiWordDrag.diWord));
ReleaseDC(NULL,locDC);
ShowCursor(FALSE);
}
}
VOID OIDoWordDrag(lpWordInfo,wX,wY)
LPOIWORDINFO lpWordInfo;
WORD wX;
WORD wY;
{
HDC locDC;
POINT locPoint;
if (lpWordInfo->wiFlags & OIWF_DRAGGINGWORD)
{
locDC = GetDC(NULL);
locPoint.x = wX;
locPoint.y = wY;
ClientToScreen(lpWordInfo->wiGen.hWnd,&locPoint);
if (!lpWordInfo->wiWordDrag.diFirst)
{
BitBlt(locDC,
lpWordInfo->wiWordDrag.diPoint.x,
lpWordInfo->wiWordDrag.diPoint.y,
lpWordInfo->wiWordDrag.diSize.x,
lpWordInfo->wiWordDrag.diSize.y,
lpWordInfo->wiWordDrag.diDC,
0,
0,
SRCINVERT);
}
lpWordInfo->wiWordDrag.diFirst = FALSE;
lpWordInfo->wiWordDrag.diPoint.x = locPoint.x - lpWordInfo->wiWordDrag.diOffset.x;
lpWordInfo->wiWordDrag.diPoint.y = locPoint.y - lpWordInfo->wiWordDrag.diOffset.y;
BitBlt(locDC,
lpWordInfo->wiWordDrag.diPoint.x,
lpWordInfo->wiWordDrag.diPoint.y,
lpWordInfo->wiWordDrag.diSize.x,
lpWordInfo->wiWordDrag.diSize.y,
lpWordInfo->wiWordDrag.diDC,
0,
0,
SRCINVERT);
ReleaseDC(NULL, locDC);
}
}
VOID OIEndWordDrag(lpWordInfo,wX,wY)
LPOIWORDINFO lpWordInfo;
WORD wX;
WORD wY;
{
HDC locDC;
POINT locPoint;
SCCVWDROPINFO locDropInfo;
if (lpWordInfo->wiFlags & OIWF_DRAGGINGWORD)
{
UTFlagOff(lpWordInfo->wiFlags,OIWF_DRAGGINGWORD);
locDC = GetDC(NULL);
locPoint.x = wX;
locPoint.y = wY;
ClientToScreen(lpWordInfo->wiGen.hWnd,&locPoint);
if (!lpWordInfo->wiWordDrag.diFirst)
{
BitBlt(locDC,
lpWordInfo->wiWordDrag.diPoint.x,
lpWordInfo->wiWordDrag.diPoint.y,
lpWordInfo->wiWordDrag.diSize.x,
lpWordInfo->wiWordDrag.diSize.y,
lpWordInfo->wiWordDrag.diDC,
0,
0,
SRCINVERT);
}
ReleaseDC(NULL, locDC);
DeleteDC(lpWordInfo->wiWordDrag.diDC);
DeleteObject(lpWordInfo->wiWordDrag.diBitmap);
locDC = GetDC(lpWordInfo->wiGen.hWnd);
SelectObject(locDC,GetStockObject(NULL_BRUSH));
SetROP2(locDC,R2_NOT);
Rectangle(
locDC,
lpWordInfo->wiWordDrag.diTopLeft.x,
lpWordInfo->wiWordDrag.diTopLeft.y,
lpWordInfo->wiWordDrag.diTopLeft.x + lpWordInfo->wiWordDrag.diSize.x,
lpWordInfo->wiWordDrag.diTopLeft.y + lpWordInfo->wiWordDrag.diSize.y);
UTFlagOff(lpWordInfo->wiErrorFlags,OIWF_RELEASEDC);
ReleaseDC(lpWordInfo->wiGen.hWnd,locDC);
ShowCursor(TRUE);
locDropInfo.diEvent = SCCVWEVENT_DROP;
locDropInfo.diItemType = SCCVWITEM_WORD;
lstrcpy(locDropInfo.diItem,lpWordInfo->wiWordDrag.diWord);
locDropInfo.diItemNumber = 0;
locDropInfo.diX = locPoint.x;
locDropInfo.diY = locPoint.y;
SendMessage(GetParent(lpWordInfo->wiGen.hWnd),SCCD_ITEMDROP,0,(DWORD)(VOID FAR *) &locDropInfo);
}
}
VOID OISendDropForWord(lpWordInfo,pWord)
LPOIWORDINFO lpWordInfo;
LPSTR pWord;
{
SCCVWDROPINFO locDropInfo;
if (pWord != NULL)
{
locDropInfo.diEvent = SCCVWEVENT_RIGHTDBL;
locDropInfo.diItemType = SCCVWITEM_WORD;
lstrcpy(locDropInfo.diItem,pWord);
locDropInfo.diItemNumber = 0;
SendMessage(GetParent(lpWordInfo->wiGen.hWnd),SCCD_ITEMDBLCLK,0,(DWORD)(VOID FAR *) &locDropInfo);
}
}
#endif // SCCFEATURE_WORDDRAG
#ifdef SCCFEATURE_TAGS
VOID OISendDropForCurrentTag(lpWordInfo,wEvent)
LPOIWORDINFO lpWordInfo;
WORD wEvent;
{
SCCVWDROPINFO locDropInfo;
if (OIGetCurrentTag( &locDropInfo.diItemNumber,
locDropInfo.diItem,
255,
lpWordInfo->wiGen.wUserFlags & SCCVW_TAGNOTEXT,
lpWordInfo))
{
locDropInfo.diEvent = wEvent;
locDropInfo.diItemType = SCCVWITEM_TAG;
SendMessage(GetParent(lpWordInfo->wiGen.hWnd),SCCD_ITEMDBLCLK,0,(DWORD)(VOID FAR *) &locDropInfo);
}
}
#endif
/*
| Clipboard stuff
|
*/
#ifdef SCCFEATURE_CLIP
WORD OIWGetRenderCountNP(lpWordInfo)
LPOIWORDINFO lpWordInfo;
{
return(7);
}
WORD OIWGetRenderInfoNP ( lpWordInfo, wFormat, pRenderInfo )
LPOIWORDINFO lpWordInfo;
WORD wFormat;
PSCCDRENDERINFO pRenderInfo;
{
pRenderInfo->wSubFormatId = 0;
switch ( wFormat )
{
case 0:
pRenderInfo->wFormatId = SCCD_FORMAT_RTF;
break;
case 1:
pRenderInfo->wFormatId = SCCD_FORMAT_PRIVATE;
UTstrcpy ( pRenderInfo->szFormatName, "Ami Text Format (Ami 2.0 && 3.0)" );
break;
case 2:
pRenderInfo->wFormatId = SCCD_FORMAT_PRIVATE+1;
UTstrcpy ( pRenderInfo->szFormatName, "Amí Text Format (Ami 1.2)" );
break;
case 3:
pRenderInfo->wFormatId = SCCD_FORMAT_PRIVATE+2;
UTstrcpy ( pRenderInfo->szFormatName, "Professional Write Plus" );
break;
case 4:
pRenderInfo->wFormatId = SCCD_FORMAT_PRIVATE+3;
UTstrcpy ( pRenderInfo->szFormatName, "Wordstar for Windows" );
break;
case 5:
pRenderInfo->wFormatId = SCCD_FORMAT_PRIVATE+4;
UTstrcpy ( pRenderInfo->szFormatName, "Legacy" );
break;
case 6:
pRenderInfo->wFormatId = SCCD_FORMAT_TEXT;
break;
}
return(0);
}
WORD OIWRenderDataNP ( lpWordInfo, wOption, pRenderData )
LPOIWORDINFO lpWordInfo;
WORD wOption;
PSCCDRENDERDATA pRenderData;
{
WORD locStartChunk;
WORD locEndChunk;
WORD locStartOffset;
WORD locEndOffset;
WORD locResults;
HANDLE hData;
hData = NULL;
if ( wOption == 0 )
{
if ((pRenderData->wFormatId == SCCD_FORMAT_RTF) &&
!(gWpOp.wFormats & WPOP_FORMAT_RTF))
return(FALSE);
else if ((pRenderData->wFormatId == SCCD_FORMAT_PRIVATE) &&
!(gWpOp.wFormats & WPOP_FORMAT_AMI2))
return(FALSE);
else if ((pRenderData->wFormatId == SCCD_FORMAT_PRIVATE+1) &&
!(gWpOp.wFormats & WPOP_FORMAT_AMI))
return(FALSE);
else if ((pRenderData->wFormatId == SCCD_FORMAT_PRIVATE+2) &&
!(gWpOp.wFormats & WPOP_FORMAT_PROWRITE))
return(FALSE);
else if ((pRenderData->wFormatId == SCCD_FORMAT_PRIVATE+3) &&
!(gWpOp.wFormats & WPOP_FORMAT_WORDSTAR))
return(FALSE);
else if ((pRenderData->wFormatId == SCCD_FORMAT_PRIVATE+4) &&
!(gWpOp.wFormats & WPOP_FORMAT_LEGACY))
return(FALSE);
else if ((pRenderData->wFormatId == SCCD_FORMAT_TEXT) &&
!(gWpOp.wFormats & WPOP_FORMAT_TEXT))
return(FALSE);
}
if (lpWordInfo->wiFlags & OIWF_AREASELECTED)
{
if (OIWComparePosByOffset(lpWordInfo,&lpWordInfo->wiAnchorPos,&lpWordInfo->wiEndPos) == 1)
{
locStartChunk = lpWordInfo->wiEndPos.posChunk;
locStartOffset = lpWordInfo->wiEndPos.posOffset;
locEndChunk = lpWordInfo->wiAnchorPos.posChunk;
locEndOffset = lpWordInfo->wiAnchorPos.posOffset;
}
else
{
locStartChunk = lpWordInfo->wiAnchorPos.posChunk;
locStartOffset = lpWordInfo->wiAnchorPos.posOffset;
locEndChunk = lpWordInfo->wiEndPos.posChunk;
locEndOffset = lpWordInfo->wiEndPos.posOffset;
}
locResults = 0;
switch ( pRenderData->wFormatId)
{
case SCCD_FORMAT_RTF:
OIWRenderRtf(lpWordInfo,pRenderData,locStartChunk,locEndChunk,locStartOffset,locEndOffset,TRUE);
locResults |= OIWHandleClipResult(lpWordInfo,locResults);
break;
case SCCD_FORMAT_PRIVATE:
OIWRenderAmi2(lpWordInfo,pRenderData,locStartChunk,locEndChunk,locStartOffset,locEndOffset);
locResults |= OIWHandleClipResult(lpWordInfo,locResults);
break;
case SCCD_FORMAT_PRIVATE+1:
OIWRenderAmi(lpWordInfo,pRenderData,locStartChunk,locEndChunk,locStartOffset,locEndOffset);
locResults |= OIWHandleClipResult(lpWordInfo,locResults);
break;
case SCCD_FORMAT_PRIVATE+2:
OIWRenderProWritePlus(lpWordInfo,pRenderData,locStartChunk,locEndChunk,locStartOffset,locEndOffset);
locResults |= OIWHandleClipResult(lpWordInfo,locResults);
break;
case SCCD_FORMAT_PRIVATE+3:
OIWRenderWordStar(lpWordInfo,pRenderData,locStartChunk,locEndChunk,locStartOffset,locEndOffset);
locResults |= OIWHandleClipResult(lpWordInfo,locResults);
break;
case SCCD_FORMAT_PRIVATE+4:
OIWRenderLegacy(lpWordInfo,pRenderData,locStartChunk,locEndChunk,locStartOffset,locEndOffset);
locResults |= OIWHandleClipResult(lpWordInfo,locResults);
break;
case SCCD_FORMAT_TEXT:
OIWRenderText(lpWordInfo,pRenderData,locStartChunk,locEndChunk,locStartOffset,locEndOffset);
locResults |= OIWHandleClipResult(lpWordInfo,locResults);
break;
default:
return(FALSE);
break;
}
if ( locResults & OIWRENDER_NOMEMORY )
return(FALSE);
else
return(TRUE);
}
else
return(FALSE);
}
WORD OIWHandleClipResult ( lpWordInfo, wResultsSoFar )
LPOIWORDINFO lpWordInfo;
WORD wResultsSoFar;
{
/* JKXXX
| If the embedded message has already been generated then
| ignore it on subsequent messages
BYTE szCaption[OIW_CAPTIONMAX];
BYTE szMessage[OIW_MESSAGEMAX];
HWND hwnd;
WORD locResult;
locResult = lpWordInfo->wiClipResult & (~(wResultsSoFar & OIWRENDER_NOEMBEDDED));
if ( locResult == OIWRENDER_OK )
return(lpWordInfo->wiClipResult);
hwnd = lpWordInfo->wiGen.hWnd;
LoadString( hInst, OIWSTR_CLIPCAPTION, szCaption, OIW_CAPTIONMAX );
UTstrcat(szCaption,lpWordInfo->wiClipFormatName);
if ( locResult & OIWRENDER_NOMEMORY )
{
LoadString( hInst, OIWMSG_NOCOPYMEM, szMessage, OIW_MESSAGEMAX );
MessageBox( hwnd, szMessage, szCaption, MB_OK | MB_ICONSTOP );
}
if ( locResult & OIWRENDER_NOEMBEDDED )
{
LoadString( hInst, OIWMSG_NOCLIPEMBEDDED, szMessage, OIW_MESSAGEMAX );
MessageBox( hwnd, szMessage, szCaption, MB_OK | MB_ICONSTOP );
}
if ( locResult & OIWRENDER_NOTABLES )
{
LoadString( hInst, OIWMSG_NOAMICLIPTABLE, szMessage, OIW_MESSAGEMAX );
MessageBox( hwnd, szMessage, szCaption, MB_OK | MB_ICONSTOP );
}
*/
return(lpWordInfo->wiClipResult);
}
LONG OIWRenderRtfToFile(lpWordInfo,lpFile)
LPOIWORDINFO lpWordInfo;
LPSTR lpFile;
{
HANDLE locDataHnd;
LPSTR locDataPtr;
OIWORDPOS locFirstPos;
OIWORDPOS locLastPos;
SHORT locFileHnd;
DWORD locSize;
while (!(lpWordInfo->wiFlags & OIWF_SIZEKNOWN))
{
SccDebugOut("\r\n Forced Read Ahead");
// SendMessage(GetParent(lpWordInfo->wiGen.hWnd),SCCD_READMEAHEAD,0,0);
DUReadMeAhead(lpWordInfo);
}
OIWGetFirstPos(&locFirstPos,lpWordInfo);
OIWGetLastPos(&locLastPos,lpWordInfo);
locDataHnd = OIWRenderRtf(lpWordInfo,NULL,locFirstPos.posChunk,locLastPos.posChunk,locFirstPos.posOffset,locLastPos.posOffset,FALSE);
if (locDataHnd)
{
locSize = UTGlobalSize(locDataHnd);
locDataPtr = UTGlobalLock(locDataHnd);
if (locDataPtr)
{
locFileHnd = _lcreat(lpFile,0);
if (locFileHnd != -1)
{
while (locSize > 10240)
{
_lwrite(locFileHnd,locDataPtr,10240);
locDataPtr += 10240;
locSize -= 10240;
}
if (locSize > 0)
{
_lwrite(locFileHnd,locDataPtr,(WORD)locSize);
}
_lclose(locFileHnd);
}
UTGlobalUnlock(locDataHnd);
UTGlobalFree(locDataHnd);
}
}
return(0);
}
#endif // SCCFEATURE_CLIP
#ifdef SCCFEATURE_DRAWTORECT
SHORT OIWSetPrintModeNP(lpWordInfo)
LPOIWORDINFO lpWordInfo;
{
// SetMapMode (lpWordInfo->wiGen.hDC, MM_TWIPS);
// return(-1);
return(1);
}
#endif // SCCFEATURE_DRAWTORECT
/*
|
|
| Focus control
|
|
|
*/
/*
| OIWSetFocus
|
|
*/
VOID OIWSetFocus(lpWordInfo)
LPOIWORDINFO lpWordInfo;
{
#ifdef SCCFEATURE_SELECT
if (lpWordInfo->wiGen.wUserFlags & SCCVW_SELECTION)
{
lpWordInfo->wiCurCaretHeight = 0;
CreateCaret(lpWordInfo->wiGen.hWnd,NULL,1,1);
UTFlagOff(lpWordInfo->wiFlags,OIWF_CARETVISIBLE);
OIWUpdateCaret(lpWordInfo);
}
#endif
}
/*
| OIWKillFocus
|
|
*/
VOID OIWKillFocus(lpWordInfo,hNewWnd)
LPOIWORDINFO lpWordInfo;
HWND hNewWnd;
{
if (lpWordInfo->wiGen.wUserFlags & SCCVW_SELECTION)
{
lpWordInfo->wiCurCaretHeight = 0;
HideCaret(lpWordInfo->wiGen.hWnd);
DestroyCaret();
}
}
BOOL OIWDoOption(lpOpInfo)
LPSCCDOPTIONINFO lpOpInfo;
{
BOOL locRet;
locRet = FALSE;
switch (lpOpInfo->dwType)
{
case SCCD_OPDISPLAY:
break;
case SCCD_OPPRINT:
break;
case SCCD_OPCLIPBOARD:
#ifdef SCCFEATURE_CLIP
#ifdef WINDOWS
//JKXXX locRet = DialogBoxParam(hInst, MAKEINTRESOURCE(100), lpOpInfo->hParentWnd, OIWpOpDlgProc, (DWORD)(LPOIWPOP)&gWpOp);
#endif
#endif
break;
}
return(locRet);
}
#ifdef SCCFEATURE_MENU
BOOL OIWFillMenu(hMenu,wOffset)
HMENU hMenu;
WORD wOffset;
{
#ifdef WINDOWS
#define OIWMENU_DRAFT 1
#define OIWMENU_NORMAL 2
#define OIWMENU_PREVIEW 3
/* JKXXX
BYTE MenuString[OIW_MENUSTRINGMAX];
LoadString( hInst, OIWSTR_DRAFT, MenuString, OIW_MENUSTRINGMAX );
AppendMenu(hMenu,MF_STRING,OIWMENU_DRAFT + wOffset, MenuString);
LoadString( hInst, OIWSTR_NORMAL, MenuString, OIW_MENUSTRINGMAX );
AppendMenu(hMenu,MF_STRING,OIWMENU_NORMAL + wOffset, MenuString);
LoadString( hInst, OIWSTR_PREVIEW, MenuString, OIW_MENUSTRINGMAX );
AppendMenu(hMenu,MF_STRING,OIWMENU_PREVIEW + wOffset, MenuString);
*/
#endif
return(TRUE);
}
VOID OIWDoMenuItem(lpWordInfo,hMenu,wId)
LPOIWORDINFO lpWordInfo;
HMENU hMenu;
WORD wId;
{
switch (wId)
{
case OIWMENU_DRAFT:
OIWSetDisplayMode(lpWordInfo,WPOP_DISPLAY_DRAFT);
break;
case OIWMENU_NORMAL:
OIWSetDisplayMode(lpWordInfo,WPOP_DISPLAY_NORMAL);
break;
case OIWMENU_PREVIEW:
OIWSetDisplayMode(lpWordInfo,WPOP_DISPLAY_PREVIEW);
break;
}
OIWUpdateHorzScrollRange(lpWordInfo);
OIClearAllWordWrapInfo(lpWordInfo);
OIFixupWordPos(&lpWordInfo->wiCurTopPos,lpWordInfo);
OIFixupWordPos(&lpWordInfo->wiAnchorPos,lpWordInfo);
OIFixupWordPos(&lpWordInfo->wiEndPos,lpWordInfo);
#ifdef SCCFEATURE_SELECT
if (lpWordInfo->wiFlags & OIWF_WORDSELECTION)
{
OIFixupWordPos(&lpWordInfo->wiWordAnchorLeft,lpWordInfo);
OIFixupWordPos(&lpWordInfo->wiWordAnchorRight,lpWordInfo);
}
OIWUpdateCaret(lpWordInfo);
#endif
DUInvalRect(lpWordInfo,NULL);
DUUpdateWindow(lpWordInfo);
}
#endif // SCCFEATURE_MENU
BOOL OIWIsCharAlphaNumericNP(locChar)
BYTE locChar;
{
return(IsCharAlphaNumeric(locChar));
}
VOID OIWDoBackgroundNP(lpWordInfo)
LPOIWORDINFO lpWordInfo;
{
#ifdef SCCFEATURE_SELECT
POINT locPoint;
static DWORD locStartTicks = 0;
DWORD locEndTicks;
if (lpWordInfo->wiFlags & OIWF_BACKDRAGSCROLL)
{
GetCursorPos(&locPoint);
ScreenToClient(lpWordInfo->wiGen.hWnd,&locPoint);
SendMessage(lpWordInfo->wiGen.hWnd,WM_MOUSEMOVE,0,MAKELONG(locPoint.x,locPoint.y));
}
locEndTicks = GetTickCount();
if (locEndTicks - locStartTicks >= 500)
{
OIWBlinkCaret(lpWordInfo);
locStartTicks = locEndTicks;
}
#endif
}
BOOL OIWMapMacFontIdToNameNP(lpWordInfo,dwFontId,pFace,pType)
LPOIWORDINFO lpWordInfo;
DWORD dwFontId;
LPSTR pFace;
WORD FAR * pType;
{
return(FALSE);
}