#include #include #include #include #include #include #include #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); }