mirror of https://github.com/lianthony/NT4.0
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.
800 lines
17 KiB
800 lines
17 KiB
/*
|
|
| SCC Viewer Technology - Source file
|
|
|
|
|
| Code: PG_W.C
|
|
| Module: SCCPG
|
|
| Developer: Phil Boutros
|
|
| Environment: Windows
|
|
| Function: Defines entry point for page view window
|
|
|
|
|
|
|
|
*/
|
|
|
|
#include "SCCPG_W.PRO"
|
|
|
|
HINSTANCE hInst;
|
|
|
|
#ifdef WIN32
|
|
#ifndef MSCHICAGO
|
|
BOOL WINAPI _CRT_INIT(HINSTANCE hInst, DWORD dwReason, LPVOID lpReserved);
|
|
|
|
BOOL WINAPI DllEntryPoint(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
|
|
{
|
|
WNDCLASS WndClass;
|
|
|
|
if (dwReason == DLL_PROCESS_ATTACH || dwReason == DLL_THREAD_ATTACH)
|
|
if (!_CRT_INIT(hInstance,dwReason,lpReserved))
|
|
return(FALSE);
|
|
|
|
if (dwReason == DLL_PROCESS_ATTACH)
|
|
{
|
|
hInst = hInstance;
|
|
|
|
WndClass.style = CS_GLOBALCLASS;
|
|
WndClass.lpfnWndProc = SccPgViewWndProc;
|
|
WndClass.cbClsExtra = 0;
|
|
WndClass.cbWndExtra = SCCPAGE_EXTRABYTES;
|
|
WndClass.hInstance = hInst;
|
|
WndClass.hIcon = NULL;
|
|
WndClass.hCursor = LoadCursor(NULL,IDC_ARROW);
|
|
WndClass.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE+1);
|
|
WndClass.lpszMenuName = (LPSTR) NULL;
|
|
WndClass.lpszClassName = (LPSTR) "SCCPAGE04";
|
|
|
|
RegisterClass(&WndClass);
|
|
}
|
|
|
|
if (dwReason == DLL_PROCESS_DETACH || dwReason == DLL_THREAD_DETACH)
|
|
if (!_CRT_INIT(hInstance,dwReason,lpReserved))
|
|
return(FALSE);
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
#endif // MSCHICAGO
|
|
#endif /*WIN32*/
|
|
|
|
|
|
#ifdef WIN16
|
|
|
|
int FAR PASCAL LibMain(hModule, wDataSeg, cbHeapSize, lpszCmdLine)
|
|
HANDLE hModule;
|
|
WORD wDataSeg;
|
|
WORD cbHeapSize;
|
|
LPSTR lpszCmdLine;
|
|
{
|
|
BOOL bSuccess;
|
|
WNDCLASS WndClass;
|
|
|
|
hInst = hModule;
|
|
if (cbHeapSize != 0) UnlockData(0);
|
|
|
|
WndClass.style = CS_GLOBALCLASS;
|
|
WndClass.lpfnWndProc = SccPgViewWndProc;
|
|
WndClass.cbClsExtra = NULL;
|
|
WndClass.cbWndExtra = SCCPAGE_EXTRABYTES;
|
|
WndClass.hInstance = hInst;
|
|
WndClass.hIcon = NULL;
|
|
WndClass.hCursor = NULL;
|
|
WndClass.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE+1);
|
|
WndClass.lpszMenuName = (LPSTR) NULL;
|
|
WndClass.lpszClassName = (LPSTR) "SCCPAGE04";
|
|
|
|
bSuccess = RegisterClass(&WndClass);
|
|
|
|
return(bSuccess);
|
|
}
|
|
|
|
int FAR PASCAL WEP (bSystemExit)
|
|
int bSystemExit;
|
|
{
|
|
return(1);
|
|
}
|
|
|
|
#endif /*WIN16*/
|
|
|
|
#ifdef WIN16
|
|
#define GetPageInfo(hWnd) ((HANDLE)GetWindowWord(hWnd,SCCPAGE_PAGEINFO))
|
|
#define SetPageInfo(hWnd,hInfo) SetWindowWord(hWnd,SCCPAGE_PAGEINFO,(WORD)hInfo)
|
|
#endif
|
|
|
|
#ifdef WIN32
|
|
#define GetPageInfo(hWnd) ((HANDLE)GetWindowLong(hWnd,SCCPAGE_PAGEINFO))
|
|
#define SetPageInfo(hWnd,hInfo) SetWindowLong(hWnd,SCCPAGE_PAGEINFO,(DWORD)hInfo)
|
|
#endif
|
|
|
|
WIN_ENTRYSC LRESULT WIN_ENTRYMOD SccPgViewWndProc(hWnd, message, wParam, lParam)
|
|
HWND hWnd;
|
|
UINT message;
|
|
WPARAM wParam;
|
|
LPARAM lParam;
|
|
{
|
|
LRESULT locRet;
|
|
HANDLE hPageInfo;
|
|
PPAGEINFO pPageInfo;
|
|
BOOL locDoDefault;
|
|
|
|
locRet = 0;
|
|
locDoDefault = FALSE;
|
|
|
|
if (message == WM_NCCREATE)
|
|
{
|
|
if ((locRet = DefWindowProc(hWnd, message, wParam, lParam)) != 0)
|
|
{
|
|
if (hPageInfo = PGCreate(hWnd))
|
|
{
|
|
SetPageInfo(hWnd,hPageInfo);
|
|
}
|
|
else
|
|
{
|
|
locRet = 0;
|
|
}
|
|
}
|
|
}
|
|
else if (message == WM_DESTROY)
|
|
{
|
|
hPageInfo = (HANDLE) GetPageInfo(hWnd);
|
|
PGDestroy(hWnd,hPageInfo);
|
|
SetPageInfo(hWnd,NULL);
|
|
}
|
|
else if (message == WM_CLOSE)
|
|
{
|
|
DestroyWindow(hWnd);
|
|
}
|
|
else
|
|
{
|
|
if (hPageInfo = (HANDLE) GetPageInfo(hWnd))
|
|
{
|
|
if (pPageInfo = (PPAGEINFO) GlobalLock(hPageInfo))
|
|
{
|
|
switch (message)
|
|
{
|
|
case WM_KEYDOWN:
|
|
|
|
PGKeyDown(pPageInfo,(int)wParam);
|
|
break;
|
|
|
|
case SCCPG_SETVIEWWND:
|
|
|
|
PGSetViewWnd(pPageInfo, (HWND)wParam);
|
|
break;
|
|
|
|
case WM_PALETTECHANGED:
|
|
case WM_QUERYNEWPALETTE:
|
|
|
|
if (IsWindow(pPageInfo->piViewWnd))
|
|
{
|
|
locRet = SendMessage(pPageInfo->piViewWnd,message,wParam,lParam);
|
|
}
|
|
break;
|
|
|
|
case WM_SIZE:
|
|
|
|
PGSize(pPageInfo,LOWORD(lParam),HIWORD(lParam));
|
|
break;
|
|
|
|
case WM_PAINT:
|
|
|
|
PGPaintWnd(pPageInfo);
|
|
break;
|
|
|
|
case SCCPG_NEXTPAGE:
|
|
|
|
PGNextPage(pPageInfo);
|
|
break;
|
|
|
|
case SCCPG_PREVPAGE:
|
|
|
|
PGPrevPage(pPageInfo);
|
|
break;
|
|
|
|
case SCCPG_SETPAGESIZE:
|
|
|
|
PGSetPageSize(pPageInfo,(PSCCPGPAGESIZE)lParam);
|
|
break;
|
|
|
|
case SCCPG_RESTART:
|
|
|
|
PGRestart(pPageInfo);
|
|
break;
|
|
|
|
case WM_LBUTTONDOWN:
|
|
|
|
PGLeftButtonDown(pPageInfo,LOWORD(lParam),HIWORD(lParam));
|
|
break;
|
|
|
|
case WM_LBUTTONUP:
|
|
|
|
PGLeftButtonUp(pPageInfo,LOWORD(lParam),HIWORD(lParam));
|
|
break;
|
|
|
|
case WM_MOUSEMOVE:
|
|
|
|
PGMouseMove(pPageInfo,LOWORD(lParam),HIWORD(lParam));
|
|
break;
|
|
|
|
default:
|
|
|
|
locDoDefault = TRUE;
|
|
break;
|
|
}
|
|
|
|
GlobalUnlock(hPageInfo);
|
|
}
|
|
else
|
|
{
|
|
locDoDefault = TRUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
locDoDefault = TRUE;
|
|
}
|
|
}
|
|
|
|
if (locDoDefault)
|
|
locRet = DefWindowProc(hWnd, message, wParam, lParam);
|
|
|
|
return (locRet);
|
|
}
|
|
|
|
HANDLE PGCreate(HWND hWnd)
|
|
{
|
|
HANDLE hPageInfo;
|
|
PPAGEINFO pPageInfo;
|
|
|
|
hPageInfo = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,sizeof(PAGEINFO));
|
|
|
|
if (hPageInfo == NULL)
|
|
return(NULL);
|
|
|
|
pPageInfo = (PPAGEINFO) GlobalLock(hPageInfo);
|
|
|
|
pPageInfo->piWnd = hWnd;
|
|
pPageInfo->piViewWnd = NULL;
|
|
pPageInfo->piPageWidth = 12240;
|
|
pPageInfo->piPageHeight = 15840;
|
|
pPageInfo->piButtonPressed = PG_NOBUTTON;
|
|
pPageInfo->piButtonDown = FALSE;
|
|
|
|
pPageInfo->piPagesMax = 10;
|
|
pPageInfo->piPagesHnd = UTGlobalAlloc(pPageInfo->piPagesMax * sizeof(HANDLE));
|
|
|
|
if (pPageInfo->piPagesHnd)
|
|
{
|
|
pPageInfo->piPages = UTGlobalLock(pPageInfo->piPagesHnd);
|
|
}
|
|
else
|
|
{
|
|
UTGlobalUnlock(hPageInfo);
|
|
UTGlobalFree(hPageInfo);
|
|
return(NULL);
|
|
}
|
|
|
|
pPageInfo->piUpBitmap = LoadBitmap(hInst,MAKEINTRESOURCE(PG_UPBITMAP));
|
|
pPageInfo->piNextBitmap = LoadBitmap(hInst,MAKEINTRESOURCE(PG_NEXTBITMAP));
|
|
pPageInfo->piPrevBitmap = LoadBitmap(hInst,MAKEINTRESOURCE(PG_PREVBITMAP));
|
|
pPageInfo->piDownBitmap = LoadBitmap(hInst,MAKEINTRESOURCE(PG_DOWNBITMAP));
|
|
|
|
GlobalUnlock(hPageInfo);
|
|
|
|
return(hPageInfo);
|
|
}
|
|
|
|
VOID PGDestroy(HWND hWnd, HANDLE hPageInfo)
|
|
{
|
|
if (hPageInfo)
|
|
{
|
|
PPAGEINFO pPageInfo;
|
|
|
|
pPageInfo = (PPAGEINFO) GlobalLock(hPageInfo);
|
|
|
|
if (pPageInfo->piPagesHnd != NULL)
|
|
{
|
|
UTGlobalUnlock(pPageInfo->piPagesHnd);
|
|
UTGlobalFree(pPageInfo->piPagesHnd);
|
|
}
|
|
|
|
if (pPageInfo->piUpBitmap != NULL)
|
|
DeleteObject(pPageInfo->piUpBitmap);
|
|
|
|
if (pPageInfo->piDownBitmap != NULL)
|
|
DeleteObject(pPageInfo->piDownBitmap);
|
|
|
|
if (pPageInfo->piPrevBitmap != NULL)
|
|
DeleteObject(pPageInfo->piPrevBitmap);
|
|
|
|
if (pPageInfo->piNextBitmap != NULL)
|
|
DeleteObject(pPageInfo->piNextBitmap);
|
|
|
|
GlobalUnlock(hPageInfo);
|
|
GlobalFree(hPageInfo);
|
|
}
|
|
}
|
|
|
|
#define PG_OFFSET 10
|
|
|
|
VOID PGSize(PPAGEINFO pPageInfo, WORD wWidth, WORD wHeight)
|
|
{
|
|
DWORD locPageHeight;
|
|
DWORD locPageWidth;
|
|
|
|
if( pPageInfo->piPageHeight * wWidth < pPageInfo->piPageWidth * wHeight)
|
|
{
|
|
pPageInfo->piPageRect.left = PG_OFFSET;
|
|
pPageInfo->piPageRect.right = wWidth - PG_OFFSET;
|
|
|
|
locPageHeight = (DWORD)(pPageInfo->piPageRect.right - pPageInfo->piPageRect.left) * pPageInfo->piPageHeight / pPageInfo->piPageWidth;
|
|
|
|
pPageInfo->piPageRect.top = (int)(((DWORD)wHeight - locPageHeight) / (DWORD)2);
|
|
pPageInfo->piPageRect.bottom = pPageInfo->piPageRect.top + (int)locPageHeight;
|
|
|
|
pPageInfo->piPagePixelsPerInch = locPageHeight * 1440 / pPageInfo->piPageHeight;
|
|
}
|
|
else
|
|
{
|
|
pPageInfo->piPageRect.top = PG_OFFSET;
|
|
pPageInfo->piPageRect.bottom = wHeight - PG_OFFSET;
|
|
|
|
locPageWidth = (DWORD)(pPageInfo->piPageRect.bottom - pPageInfo->piPageRect.top) * pPageInfo->piPageWidth / pPageInfo->piPageHeight;
|
|
|
|
pPageInfo->piPageRect.left = (int)(((DWORD)wWidth - locPageWidth) / (DWORD)2);
|
|
pPageInfo->piPageRect.right = pPageInfo->piPageRect.left + (int)locPageWidth;
|
|
|
|
pPageInfo->piPagePixelsPerInch = locPageWidth * 1440 / pPageInfo->piPageWidth;
|
|
}
|
|
|
|
pPageInfo->piMarginRect.top = pPageInfo->piPageRect.top + (int)(pPageInfo->piPagePixelsPerInch / 2);
|
|
pPageInfo->piMarginRect.bottom = pPageInfo->piPageRect.bottom - (int)(pPageInfo->piPagePixelsPerInch / 2);
|
|
pPageInfo->piMarginRect.left = pPageInfo->piPageRect.left + (int)(pPageInfo->piPagePixelsPerInch / 2);
|
|
pPageInfo->piMarginRect.right = pPageInfo->piPageRect.right - (int)(pPageInfo->piPagePixelsPerInch / 2);
|
|
|
|
InvalidateRect(pPageInfo->piWnd, NULL, TRUE);
|
|
}
|
|
|
|
VOID PGSetPageSize(PPAGEINFO pPageInfo,PSCCPGPAGESIZE pPageSize)
|
|
{
|
|
RECT locRect;
|
|
|
|
/* Clear data for all but top of first page */
|
|
|
|
PGRestart(pPageInfo);
|
|
|
|
pPageInfo->piPageHeight = pPageSize->dwHeightInTwips;
|
|
pPageInfo->piPageWidth = pPageSize->dwWidthInTwips;
|
|
|
|
GetClientRect(pPageInfo->piWnd,&locRect);
|
|
|
|
PGSize(pPageInfo, (WORD)(locRect.right - locRect.left), (WORD)(locRect.bottom - locRect.top));
|
|
}
|
|
|
|
|
|
VOID PGPaintWnd(PPAGEINFO pPageInfo)
|
|
{
|
|
HDC locDC;
|
|
PAINTSTRUCT locPs;
|
|
|
|
locDC = BeginPaint(pPageInfo->piWnd,&locPs);
|
|
|
|
PGDrawPage(pPageInfo, pPageInfo->piCurPage, locDC);
|
|
|
|
PGDrawPageControl(pPageInfo, locDC);
|
|
|
|
EndPaint(pPageInfo->piWnd,&locPs);
|
|
}
|
|
|
|
VOID PGDrawPageControl(PPAGEINFO pPageInfo, HDC hDC)
|
|
{
|
|
HDC locDC;
|
|
HDC locMemoryDC;
|
|
HBITMAP locOldBitmap;
|
|
HBITMAP locBitmap;
|
|
|
|
if (hDC == NULL)
|
|
locDC = GetDC(pPageInfo->piWnd);
|
|
else
|
|
locDC = hDC;
|
|
|
|
if (pPageInfo->piPageCount <= 1)
|
|
locBitmap = pPageInfo->piDownBitmap;
|
|
|
|
else if ( (pPageInfo->piCurPage+1 >= pPageInfo->piPageCount) &&
|
|
pPageInfo->piHaveAllPages )
|
|
locBitmap = pPageInfo->piNextBitmap;
|
|
|
|
else if (pPageInfo->piCurPage <=0)
|
|
locBitmap = pPageInfo->piPrevBitmap;
|
|
|
|
else
|
|
locBitmap = pPageInfo->piUpBitmap;
|
|
|
|
|
|
// These NAMES are BACKWARDS!!!!
|
|
|
|
if (pPageInfo->piButtonDown)
|
|
{
|
|
if (pPageInfo->piButtonPressed == PG_PREVBUTTON)
|
|
if (pPageInfo->piPageCount <= 1)
|
|
locBitmap = pPageInfo->piDownBitmap;
|
|
else
|
|
locBitmap = pPageInfo->piPrevBitmap;
|
|
|
|
if (pPageInfo->piButtonPressed == PG_NEXTBUTTON)
|
|
if (pPageInfo->piCurPage <=0)
|
|
locBitmap = pPageInfo->piDownBitmap;
|
|
else
|
|
locBitmap = pPageInfo->piNextBitmap;
|
|
}
|
|
|
|
if (locBitmap != NULL)
|
|
{
|
|
SetMapMode(locDC,MM_TEXT);
|
|
|
|
locMemoryDC = CreateCompatibleDC(locDC);
|
|
locOldBitmap = SelectObject(locMemoryDC, locBitmap);
|
|
|
|
BitBlt(locDC,
|
|
pPageInfo->piPageRect.right - 20,
|
|
pPageInfo->piPageRect.top,
|
|
20,
|
|
21,
|
|
locMemoryDC, 0, 0, SRCCOPY);
|
|
|
|
SelectObject(locMemoryDC,locOldBitmap);
|
|
DeleteDC(locMemoryDC);
|
|
}
|
|
|
|
if (hDC == NULL)
|
|
ReleaseDC(pPageInfo->piWnd,locDC);
|
|
|
|
}
|
|
|
|
|
|
|
|
DWORD PGMapPosToButtom(PPAGEINFO pPageInfo, WORD wX, WORD wY)
|
|
{
|
|
DWORD locRet;
|
|
|
|
locRet = PG_NOBUTTON;
|
|
|
|
if ((int)wY > pPageInfo->piPageRect.top && (int)wY < (pPageInfo->piPageRect.top + 20) &&
|
|
(int)wX < pPageInfo->piPageRect.right && (int)wX > (pPageInfo->piPageRect.right - 20))
|
|
{
|
|
if ((wY - pPageInfo->piPageRect.top) < (20 - (pPageInfo->piPageRect.right - wX)))
|
|
{
|
|
locRet = PG_PREVBUTTON;
|
|
}
|
|
else
|
|
{
|
|
locRet = PG_NEXTBUTTON;
|
|
}
|
|
}
|
|
|
|
return(locRet);
|
|
}
|
|
|
|
VOID PGLeftButtonDown(PPAGEINFO pPageInfo, WORD wX, WORD wY)
|
|
{
|
|
SetFocus(pPageInfo->piWnd);
|
|
|
|
pPageInfo->piButtonPressed = PGMapPosToButtom(pPageInfo, wX, wY);
|
|
|
|
if (pPageInfo->piButtonPressed != PG_NOBUTTON)
|
|
{
|
|
pPageInfo->piButtonDown = TRUE;
|
|
PGDrawPageControl(pPageInfo, NULL);
|
|
}
|
|
|
|
}
|
|
|
|
VOID PGMouseMove(PPAGEINFO pPageInfo, WORD wX, WORD wY)
|
|
{
|
|
if (pPageInfo->piButtonDown != (pPageInfo->piButtonPressed == PGMapPosToButtom(pPageInfo, wX, wY)))
|
|
{
|
|
if (pPageInfo->piButtonPressed != PG_NOBUTTON) // SDN 27980
|
|
pPageInfo->piButtonDown = !pPageInfo->piButtonDown;
|
|
PGDrawPageControl(pPageInfo, NULL);
|
|
}
|
|
}
|
|
|
|
VOID PGLeftButtonUp(PPAGEINFO pPageInfo, WORD wX, WORD wY)
|
|
{
|
|
PGMouseMove(pPageInfo,wX,wY);
|
|
|
|
if (pPageInfo->piButtonDown)
|
|
{
|
|
if (pPageInfo->piButtonPressed == PG_PREVBUTTON)
|
|
{
|
|
PGPrevPage(pPageInfo);
|
|
}
|
|
if (pPageInfo->piButtonPressed == PG_NEXTBUTTON)
|
|
{
|
|
PGNextPage(pPageInfo);
|
|
}
|
|
}
|
|
|
|
pPageInfo->piButtonPressed = PG_NOBUTTON;
|
|
pPageInfo->piButtonDown = FALSE;
|
|
PGDrawPageControl(pPageInfo, NULL);
|
|
}
|
|
|
|
VOID PGInvalidateContents(PPAGEINFO pPageInfo)
|
|
{
|
|
RECT locRect;
|
|
|
|
locRect = pPageInfo->piPageRect;
|
|
InflateRect(&locRect,-1,-1);
|
|
InvalidateRect(pPageInfo->piWnd, &locRect, TRUE);
|
|
|
|
locRect.top = pPageInfo->piPageRect.top;
|
|
locRect.right = pPageInfo->piPageRect.right;
|
|
locRect.bottom = locRect.top + 21;
|
|
locRect.left = locRect.right - 20;
|
|
ValidateRect(pPageInfo->piWnd, &locRect);
|
|
}
|
|
|
|
VOID PGSetViewWnd(PPAGEINFO pPageInfo, HWND hViewWnd)
|
|
{
|
|
DWORD locIndex;
|
|
SCCVWDRAWTORECT locDraw;
|
|
|
|
if (IsWindow(pPageInfo->piViewWnd))
|
|
{
|
|
for (locIndex = 0; locIndex < pPageInfo->piPageCount; locIndex++)
|
|
{
|
|
UTGlobalFree(pPageInfo->piPages[locIndex]);
|
|
}
|
|
}
|
|
|
|
pPageInfo->piCurPage = 0;
|
|
pPageInfo->piPageCount = 0;
|
|
pPageInfo->piHaveAllPages = FALSE;
|
|
|
|
pPageInfo->piViewWnd = hViewWnd;
|
|
|
|
if (SendMessage(pPageInfo->piViewWnd,SCCVW_INITDRAWTORECT,0,(LPARAM)(PSCCVWDRAWTORECT)&locDraw) == SCCVWERR_OK)
|
|
{
|
|
pPageInfo->piPages[0] = locDraw.hStartPos;
|
|
pPageInfo->piPageCount = 1;
|
|
}
|
|
else
|
|
{
|
|
pPageInfo->piViewWnd = NULL;
|
|
}
|
|
|
|
PGInvalidateContents(pPageInfo);
|
|
}
|
|
|
|
VOID PGRestart(PPAGEINFO pPageInfo)
|
|
{
|
|
DWORD locIndex;
|
|
|
|
if (IsWindow(pPageInfo->piViewWnd))
|
|
{
|
|
for (locIndex = 1; locIndex < pPageInfo->piPageCount; locIndex++)
|
|
{
|
|
UTGlobalFree(pPageInfo->piPages[locIndex]);
|
|
}
|
|
}
|
|
|
|
pPageInfo->piCurPage = 0;
|
|
pPageInfo->piPageCount = 1;
|
|
pPageInfo->piHaveAllPages = FALSE;
|
|
|
|
PGInvalidateContents(pPageInfo);
|
|
}
|
|
|
|
VOID PGDrawPage(PPAGEINFO pPageInfo, DWORD dwPage, HDC hDC)
|
|
{
|
|
SCCVWDRAWTORECT locDraw;
|
|
int locSavedDC;
|
|
RECT locRect;
|
|
|
|
locSavedDC = SaveDC(hDC);
|
|
|
|
/*
|
|
| Draw page border
|
|
*/
|
|
|
|
Rectangle(hDC, pPageInfo->piPageRect.left, pPageInfo->piPageRect.top, pPageInfo->piPageRect.right, pPageInfo->piPageRect.bottom);
|
|
|
|
/*
|
|
| Bail if no view
|
|
*/
|
|
|
|
if (!IsWindow(pPageInfo->piViewWnd))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (dwPage >= pPageInfo->piPageCount)
|
|
{
|
|
return;
|
|
}
|
|
|
|
/*
|
|
| Fill DrawToRect structure
|
|
*/
|
|
|
|
locDraw.hStartPos = pPageInfo->piPages[dwPage];
|
|
locDraw.hDC = hDC;
|
|
locDraw.lUnitsPerInch = 1440;
|
|
locDraw.lFormatWidth = pPageInfo->piPageWidth - 1440;
|
|
locDraw.lFormatHeight = pPageInfo->piPageHeight - 1440;
|
|
locDraw.lTop = pPageInfo->piMarginRect.top;
|
|
locDraw.lLeft = pPageInfo->piMarginRect.left;
|
|
locDraw.lBottom = pPageInfo->piMarginRect.bottom;
|
|
locDraw.lRight = pPageInfo->piMarginRect.right;
|
|
|
|
/*
|
|
| Clip to page borders
|
|
*/
|
|
|
|
locRect = pPageInfo->piPageRect;
|
|
InflateRect(&locRect,-2,-2);
|
|
IntersectClipRect(hDC,locRect.left,locRect.top,locRect.right,locRect.bottom);
|
|
|
|
/*
|
|
| Tell view window to draw and save handle to start of
|
|
| next page, if we don't already have it.
|
|
*/
|
|
|
|
if (SendMessage(pPageInfo->piViewWnd,SCCVW_DRAWTORECT,0,(LPARAM)(PSCCVWDRAWTORECT)&locDraw) == SCCVWERR_OK)
|
|
{
|
|
if (pPageInfo->piPageCount == dwPage+1)
|
|
{
|
|
if (pPageInfo->piPageCount == pPageInfo->piPagesMax)
|
|
{
|
|
pPageInfo->piPagesMax += 10;
|
|
|
|
UTGlobalUnlock(pPageInfo->piPagesHnd);
|
|
pPageInfo->piPagesHnd = UTGlobalReAlloc(pPageInfo->piPagesHnd,pPageInfo->piPagesMax * sizeof(HANDLE));
|
|
pPageInfo->piPages = UTGlobalLock(pPageInfo->piPagesHnd);
|
|
}
|
|
|
|
pPageInfo->piPages[dwPage+1] = locDraw.hNextPos;
|
|
pPageInfo->piPageCount++;
|
|
}
|
|
else
|
|
{
|
|
// don't set this flag if we were asking to draw less than the
|
|
// last page.... SDN 1/8/95
|
|
if (dwPage > pPageInfo->piPageCount)
|
|
pPageInfo->piHaveAllPages = TRUE;
|
|
GlobalFree(locDraw.hNextPos);
|
|
}
|
|
}
|
|
else
|
|
pPageInfo->piHaveAllPages = TRUE;
|
|
|
|
|
|
|
|
RestoreDC(hDC,locSavedDC);
|
|
}
|
|
|
|
VOID PGBeginDoc(PPAGEINFO pPageInfo)
|
|
{
|
|
pPageInfo->piCurPage=0;
|
|
PGInvalidateContents(pPageInfo);
|
|
}
|
|
|
|
|
|
VOID PGEndDoc(PPAGEINFO pPageInfo)
|
|
{
|
|
HDC locDC = NULL;
|
|
BOOL bAbort = FALSE;
|
|
MSG locMsg;
|
|
HWND hParent;
|
|
|
|
|
|
if (!pPageInfo->piHaveAllPages)
|
|
{
|
|
locDC = GetDC(pPageInfo->piWnd);
|
|
|
|
hParent = GetParent(pPageInfo->piWnd);
|
|
SendMessage( hParent, SCCVW_PAGETOEND, 1, 0 );
|
|
EnableWindow( hParent, FALSE );
|
|
|
|
while (! pPageInfo->piHaveAllPages )
|
|
{
|
|
while( PeekMessage(&locMsg,NULL,0,0,PM_REMOVE) )
|
|
{
|
|
if(locMsg.message == WM_KEYDOWN &&
|
|
locMsg.wParam == VK_ESCAPE )
|
|
{
|
|
bAbort = TRUE;
|
|
}
|
|
else
|
|
{
|
|
TranslateMessage(&locMsg);
|
|
DispatchMessage(&locMsg);
|
|
}
|
|
}
|
|
|
|
if( bAbort )
|
|
break;
|
|
else
|
|
{
|
|
// watch it flip out
|
|
pPageInfo->piCurPage=pPageInfo->piPageCount -1;
|
|
PGDrawPage (pPageInfo, pPageInfo->piCurPage, locDC);
|
|
}
|
|
}
|
|
|
|
SendMessage( hParent, SCCVW_PAGETOEND, 0, 0 );
|
|
EnableWindow(hParent,TRUE);
|
|
|
|
if (locDC != NULL)
|
|
ReleaseDC(pPageInfo->piWnd,locDC);
|
|
}
|
|
|
|
pPageInfo->piCurPage=pPageInfo->piPageCount -1;
|
|
PGInvalidateContents(pPageInfo);
|
|
}
|
|
|
|
#ifdef NEVER
|
|
VOID PGEndDoc(PPAGEINFO pPageInfo)
|
|
{
|
|
HDC locDC = NULL;
|
|
|
|
locDC = GetDC(pPageInfo->piWnd);
|
|
|
|
while (! pPageInfo->piHaveAllPages)
|
|
{
|
|
pPageInfo->piCurPage=pPageInfo->piPageCount -1;
|
|
PGDrawPage (pPageInfo, pPageInfo->piCurPage, locDC);
|
|
// PGNextPage (pPageInfo); // watch it flip out
|
|
}
|
|
|
|
if (locDC != NULL)
|
|
ReleaseDC(pPageInfo->piWnd,locDC);
|
|
|
|
pPageInfo->piCurPage=pPageInfo->piPageCount -1;
|
|
PGInvalidateContents(pPageInfo);
|
|
}
|
|
#endif
|
|
|
|
VOID PGNextPage(PPAGEINFO pPageInfo)
|
|
{
|
|
if (pPageInfo->piCurPage+1 < pPageInfo->piPageCount)
|
|
{
|
|
pPageInfo->piCurPage++;
|
|
|
|
PGInvalidateContents(pPageInfo);
|
|
}
|
|
}
|
|
|
|
VOID PGPrevPage(PPAGEINFO pPageInfo)
|
|
{
|
|
if (pPageInfo->piCurPage > 0)
|
|
{
|
|
pPageInfo->piCurPage--;
|
|
|
|
PGInvalidateContents(pPageInfo);
|
|
}
|
|
}
|
|
|
|
VOID PGKeyDown(PPAGEINFO pPageInfo, int iKey)
|
|
{
|
|
switch (iKey)
|
|
{
|
|
case VK_PRIOR:
|
|
PGPrevPage(pPageInfo);
|
|
break;
|
|
case VK_NEXT:
|
|
PGNextPage(pPageInfo);
|
|
break;
|
|
case VK_HOME:
|
|
if (GetKeyState(VK_CONTROL) & 0x8000)
|
|
PGBeginDoc (pPageInfo);
|
|
break;
|
|
case VK_END:
|
|
if (GetKeyState(VK_CONTROL) & 0x8000)
|
|
PGEndDoc (pPageInfo);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
PGDrawPageControl(pPageInfo, NULL);
|
|
}
|
|
|