681 lines
20 KiB
C
681 lines
20 KiB
C
/************************************************************/
|
||
/* Windows Write, Copyright 1985-1992 Microsoft Corporation */
|
||
/************************************************************/
|
||
|
||
//#define NOATOM
|
||
#define NOBITMAP
|
||
#define NOBRUSH
|
||
#define NOCLIPBOARD
|
||
#define NOCOMM
|
||
#define NOCREATESTRUCT
|
||
#define NODRAWTEXT
|
||
#define NOGDICAPMASKS
|
||
#define NOICON
|
||
#define NOKEYSTATE
|
||
#define NOMB
|
||
#define NOMEMMGR
|
||
//#define NOMENUS
|
||
#define NOMETAFILE
|
||
#define NOMINMAX
|
||
#define NOOPENFILE
|
||
#define NOPEN
|
||
#define NOREGION
|
||
//#define NOSHOWWINDOW
|
||
#define NOSOUND
|
||
#define NOSYSCOMMANDS
|
||
#define NOSYSMETRICS
|
||
#define NOVIRTUALKEYCODES
|
||
#define NOWH
|
||
#define NOWINOFFSETS
|
||
#define NOWINSTYLES
|
||
#define NOWNDCLASS
|
||
#include <windows.h>
|
||
|
||
#include "mw.h"
|
||
#define NOUAC
|
||
#include "cmddefs.h"
|
||
#include "dispdefs.h"
|
||
#include "wwdefs.h"
|
||
#define NOSTRUNDO
|
||
#include "str.h"
|
||
#include "menudefs.h"
|
||
#include "prmdefs.h"
|
||
#include "propdefs.h"
|
||
#include "debug.h"
|
||
#include "fontdefs.h"
|
||
#include "preload.h"
|
||
#include "winddefs.h"
|
||
#define NOIDISAVEPRINT
|
||
#define NOIDIFORMATS
|
||
#include "dlgdefs.h"
|
||
|
||
#if defined(OLE)
|
||
#include "obj.h"
|
||
#endif
|
||
|
||
static void DrawResizeHole(HWND hWnd, HDC hDC);
|
||
|
||
extern HANDLE hMmwModInstance; /* handle to it's own module instance */
|
||
extern HWND hParentWw; /* handle to parent's window */
|
||
extern HWND vhWndMsgBoxParent;
|
||
extern HCURSOR vhcHourGlass;
|
||
extern HCURSOR vhcIBeam;
|
||
extern HCURSOR vhcArrow;
|
||
extern HMENU vhMenu;
|
||
extern MSG vmsgLast;
|
||
extern FARPROC lpDialogHelp;
|
||
|
||
extern struct WWD rgwwd[];
|
||
extern struct WWD *pwwdCur;
|
||
extern int wwCur;
|
||
extern int vfInitializing;
|
||
extern int vfInsertOn;
|
||
extern int vfSeeSel;
|
||
extern int vfSelHidden;
|
||
extern int vfDeactByOtherApp;
|
||
extern int vfDownClick;
|
||
extern int vfCursorVisible;
|
||
extern int vfMouseExist;
|
||
extern int flashID;
|
||
extern int ferror;
|
||
extern typeCP cpMacCur;
|
||
extern struct SEL selCur;
|
||
extern CHAR stBuf[];
|
||
extern HBITMAP hbmNull;
|
||
extern CHAR szWindows[];
|
||
extern CHAR szDevices[];
|
||
extern CHAR szIntl[];
|
||
extern WORD fPrintOnly;
|
||
|
||
#ifdef RULERALSO
|
||
extern BOOL vfDisableMenus;
|
||
#endif /* RULERALSO */
|
||
|
||
#ifdef DEBUG
|
||
#define STATIC
|
||
#else /* not DEBUG */
|
||
#define STATIC static
|
||
#endif /* not DEBUG */
|
||
|
||
CHAR **hszDevmodeChangeParam = NULL;
|
||
BOOL vfDevmodeChange = fFalse;
|
||
int wWininiChange = 0;
|
||
|
||
BOOL vfDead = FALSE;
|
||
BOOL vfIconic = FALSE;
|
||
/*int vcActiveCount = 0; 0 or 1 for active/deactive count */
|
||
|
||
|
||
void MmwCreate(HWND, LONG);
|
||
void NEAR MmwPaint(HWND);
|
||
void MmwSize(HWND, int, int, WORD);
|
||
void MmwCommand(HWND, WORD, HWND, WORD);
|
||
void MmwVertScroll(HWND, WORD, int);
|
||
void NEAR MmwHorzScroll(HWND, WORD, int);
|
||
|
||
|
||
int PASCAL WinMain( hInstance, hPrevInstance, lpszCmdLine, cmdShow )
|
||
HANDLE hInstance, hPrevInstance;
|
||
LPSTR lpszCmdLine;
|
||
int cmdShow;
|
||
{
|
||
/* Set up all manner of windows-related data; create parent (menu)
|
||
window and child (document) window */
|
||
|
||
if (!FInitWinInfo( hInstance, hPrevInstance, lpszCmdLine, cmdShow ))
|
||
/* Could not initialize; WRITE fails */
|
||
{
|
||
return FALSE;
|
||
}
|
||
|
||
if (fPrintOnly)
|
||
{
|
||
UpdateDisplay(FALSE);
|
||
fnPrPrinter();
|
||
FMmwClose( hParentWw );
|
||
DeleteObject( hbmNull );
|
||
_exit( vmsgLast.wParam );
|
||
}
|
||
else
|
||
MainLoop();
|
||
|
||
DeleteObject( hbmNull );
|
||
_exit( vmsgLast.wParam );
|
||
}
|
||
|
||
|
||
long FAR PASCAL MmwWndProc(hWnd, message, wParam, lParam)
|
||
HWND hWnd;
|
||
unsigned message;
|
||
WORD wParam;
|
||
LONG lParam;
|
||
{
|
||
extern int vfCloseFilesInDialog;
|
||
extern long ropErase;
|
||
extern int vfLargeSys;
|
||
extern HDC vhDCPrinter;
|
||
extern HWND vhWndCancelPrint;
|
||
extern HWND vhWndPageInfo;
|
||
extern HFONT vhfPageInfo;
|
||
extern BOOL vfWinFailure;
|
||
CHAR szT[cchMaxSz];
|
||
long lReturn = 0L;
|
||
|
||
#if defined(JAPAN) & defined(IME_HIDDEN) //IME3.1J
|
||
//IR_UNDETERMINE
|
||
extern HWND vhWnd; /* WINDOWS: Handle of the current document display window*/
|
||
extern typeCP selUncpFirst;
|
||
extern typeCP selUncpLim;
|
||
if(selUncpFirst < selUncpLim) {
|
||
switch (message) {
|
||
case WM_INITMENU:
|
||
case WM_VSCROLL:
|
||
case WM_HSCROLL:
|
||
UndetermineToDetermine(vhWnd);
|
||
break;
|
||
case WM_SIZE:
|
||
if(SIZEICONIC == wParam )
|
||
UndetermineToDetermine(vhWnd);
|
||
default:
|
||
break; //Fall
|
||
}
|
||
}
|
||
#endif
|
||
|
||
switch (message)
|
||
{
|
||
case WM_MENUSELECT:
|
||
SetShiftFlags();
|
||
break;
|
||
|
||
case WM_CREATE:
|
||
/* Window's being created; lParam contains lpParam field
|
||
** passed to CreateWindow */
|
||
MmwCreate(hWnd, lParam);
|
||
break;
|
||
|
||
case WM_PAINT:
|
||
/* Time to repaint this window. */
|
||
MmwPaint(hWnd);
|
||
break;
|
||
|
||
#if defined(OLE)
|
||
case WM_DROPFILES:
|
||
/* We got dropped on, so bring ourselves to the top */
|
||
BringWindowToTop(hWnd);
|
||
#ifdef DEBUG
|
||
OutputDebugString("Dropping on main window\r\n");
|
||
#endif
|
||
ObjGetDrop(wParam,TRUE);
|
||
break;
|
||
#endif
|
||
|
||
case WM_INITMENU:
|
||
/* setup the pull down menu before being drawn */
|
||
/* wParam is the top level menu handle */
|
||
vhMenu = (HMENU)wParam;
|
||
break;
|
||
|
||
case WM_INITMENUPOPUP:
|
||
/* setup the pull down menu before being drawn */
|
||
/* wParam is the popup menu handle */
|
||
/* LOWORD(lParam) = index of popup in main menu */
|
||
/* HIWORD(lParam) = 1 if system menu, 0 if application main menu */
|
||
EndLongOp(vhcArrow);
|
||
if (HIWORD(lParam) == 0)
|
||
{ /* we care for the application main menu only */
|
||
#ifdef CYCLESTOBURN
|
||
switch (LOWORD(lParam)) {
|
||
default:
|
||
break;
|
||
case EDIT:
|
||
PreloadCodeTsk( tskScrap );
|
||
case CHARACTER:
|
||
PreloadCodeTsk( tskFormat );
|
||
break;
|
||
}
|
||
#endif
|
||
SetAppMenu((HMENU)wParam, LOWORD(lParam));
|
||
}
|
||
/* Turn on the cursor so we can see where it is */
|
||
if (!vfInsertOn && selCur.cpFirst == selCur.cpLim)
|
||
ToggleSel( selCur.cpFirst, selCur.cpFirst, TRUE );
|
||
break;
|
||
|
||
case WM_ACTIVATE:
|
||
/* We are becoming the active window iff wParam is non-0 */
|
||
/* HIWORD( lParam ) is true iff the window is iconic */
|
||
if (wParam && !HIWORD(lParam)
|
||
#if 0
|
||
#if defined(OLE)
|
||
&& !nBlocking
|
||
#endif
|
||
#endif
|
||
&& IsWindowEnabled(wwdCurrentDoc.wwptr))
|
||
{
|
||
SetFocus( wwdCurrentDoc.wwptr );
|
||
vhWndMsgBoxParent = hParentWw;
|
||
}
|
||
if (wParam)
|
||
{
|
||
vfDeactByOtherApp = FALSE; /* this is to conquer a windows' bug */
|
||
}
|
||
|
||
/* did we receive a devmode/winini change that we should process now? */
|
||
if (wWininiChange != 0)
|
||
{
|
||
Assert(wWininiChange > 0 && wWininiChange < wWininiChangeMax);
|
||
PostMessage( hWnd, wWndMsgSysChange, WM_WININICHANGE, (LONG) wWininiChange );
|
||
}
|
||
|
||
if (vfDevmodeChange)
|
||
{
|
||
Assert(hszDevmodeChangeParam != NULL);
|
||
PostMessage( hWnd, wWndMsgSysChange, WM_DEVMODECHANGE, (LONG) 0 );
|
||
vfDevmodeChange = fFalse;
|
||
}
|
||
|
||
if (!vfInitializing && vfCursorVisible)
|
||
ShowCursor(wParam);
|
||
break;
|
||
|
||
case WM_ACTIVATEAPP:
|
||
/* We are activated or deactivated by another application */
|
||
if (wParam == 0) /* being deactivated */
|
||
{
|
||
vfDeactByOtherApp = TRUE;
|
||
vfDownClick = FALSE;
|
||
/* hide selection if needed */
|
||
if (!vfSelHidden)
|
||
{
|
||
UpdateWindow(hParentWw);
|
||
ToggleSel(selCur.cpFirst, selCur.cpLim, FALSE);
|
||
vfSelHidden = TRUE;
|
||
}
|
||
|
||
/* Deselect our fonts so that they can move if necessary. */
|
||
ResetFont(FALSE);
|
||
if (vhWndCancelPrint == NULL)
|
||
{
|
||
/* Reset the printer font iff we are not printing or
|
||
repaginating. */
|
||
ResetFont(TRUE);
|
||
}
|
||
if (!vfLargeSys && vhfPageInfo != NULL)
|
||
{
|
||
DeleteObject(SelectObject(GetDC(vhWndPageInfo),
|
||
GetStockObject(SYSTEM_FONT)));
|
||
vhfPageInfo = NULL;
|
||
}
|
||
}
|
||
else /* being activated */
|
||
{
|
||
vfDeactByOtherApp = vfWinFailure = FALSE;
|
||
|
||
#ifndef WIN30
|
||
/* We get into a recursive loop in the situation where we
|
||
have a bad/invalid/nonexistent printer driver because
|
||
GetPrinterDC() calls CreateIC() which will end up sending
|
||
another WM_ACTIVATEAPP! I think the machinery in Write
|
||
work just fine with a null vhDCPrinter, and will retry
|
||
again when it needs to do so ..pault 9/28/89 */
|
||
|
||
/* get a DC for the current printer if necessary */
|
||
if (vhDCPrinter == NULL)
|
||
{
|
||
GetPrinterDC(FALSE);
|
||
}
|
||
#endif
|
||
|
||
/* hilight selection if needed */
|
||
if (vfSelHidden)
|
||
{
|
||
UpdateWindow(hParentWw);
|
||
/* Turn on selection highlight
|
||
vfInsEnd = selCur.fEndOfLine;*/
|
||
vfSelHidden = FALSE;
|
||
ToggleSel(selCur.cpFirst, selCur.cpLim, TRUE);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case WM_TIMER:
|
||
/* the only timer event for the parent window is flashID */
|
||
/* the blinking insertion point is for the doc window */
|
||
if (vfDeactByOtherApp)
|
||
{
|
||
FlashWindow(hParentWw, TRUE);
|
||
}
|
||
else
|
||
{
|
||
KillTimer(hParentWw, flashID);
|
||
flashID = 0;
|
||
FlashWindow(hParentWw, FALSE);
|
||
}
|
||
break;
|
||
|
||
case WM_CLOSE:
|
||
/* The user has selected "Close" on the system menu */
|
||
/* Failure to process this message means that DefWindowProc */
|
||
/* Will send us a Destroy message */
|
||
/* A return value of TRUE says "don't close" */
|
||
/* Calling DestroyWindow means "Go ahead and close" */
|
||
|
||
lReturn = (LONG) !FMmwClose( hWnd );
|
||
break;
|
||
|
||
case WM_QUERYENDSESSION:
|
||
/* User has selected "End Session" from the MS-DOS window */
|
||
/* Return TRUE if willing to quit, else return FALSE */
|
||
lReturn = (LONG) FConfirmSave();
|
||
break;
|
||
|
||
case WM_ENDSESSION:
|
||
/* if wParam is TRUE, Windows is shutting down and we should */
|
||
/* delete temp files */
|
||
/* if wParam is FALSE, then an "End session" has been aborted */
|
||
if (wParam)
|
||
{
|
||
KillTempFiles( TRUE );
|
||
}
|
||
break;
|
||
|
||
case WM_DESTROY:
|
||
/* Window's being destroyed. */
|
||
MmwDestroy();
|
||
lReturn = (LONG) TRUE;
|
||
break;
|
||
|
||
case WM_SIZE:
|
||
/* Window's size is changing. lParam contains the height
|
||
** and width, in the low and high words, respectively.
|
||
** wParam contains SIZENORMAL for "normal" size changes,
|
||
** SIZEICONIC when the window is being made iconic, and
|
||
** SIZEFULLSCREEN when the window is being made full screen. */
|
||
MmwSize(hWnd, MAKEPOINT(lParam).x, MAKEPOINT(lParam).y, wParam);
|
||
//if (wParam == SIZEICONIC)
|
||
lReturn = DefWindowProc(hWnd, message, wParam, lParam);
|
||
break;
|
||
|
||
case WM_COMMAND:
|
||
/* A menu item has been selected, or a control is notifying
|
||
** its parent. wParam is the menu item value (for menus),
|
||
** or control ID (for controls). For controls, the low word
|
||
** of lParam has the window handle of the control, and the hi
|
||
** word has the notification code. For menus, lParam contains
|
||
** 0L. */
|
||
|
||
#ifdef RULERALSO
|
||
if (!vfDisableMenus)
|
||
#endif /* RULERALSO */
|
||
|
||
{
|
||
MmwCommand(hWnd, wParam, (HWND)LOWORD(lParam), HIWORD(lParam));
|
||
}
|
||
break;
|
||
|
||
case WM_SYSCOMMAND:
|
||
/* system command */
|
||
|
||
#ifdef RULERALSO
|
||
if (!vfDisableMenus)
|
||
#endif /* RULERALSO */
|
||
{
|
||
lReturn = DefWindowProc(hWnd, message, wParam, lParam);
|
||
}
|
||
|
||
break;
|
||
|
||
case WM_VSCROLL:
|
||
/* Vertical scroll bar input. wParam contains the
|
||
** scroll code. For the thumb movement codes, the low
|
||
** word of lParam contain the new scroll position.
|
||
** Possible values for wParam are: SB_LINEUP, SB_LINEDOWN,
|
||
** SB_PAGEUP, SB_PAGEDOWN, SB_THUMBPOSITION, SB_THUMBTRACK */
|
||
MmwVertScroll(hWnd, wParam, (int)lParam);
|
||
break;
|
||
|
||
case WM_HSCROLL:
|
||
/* Horizontal scroll bar input. Parameters same as for
|
||
** WM_HSCROLL. UP and DOWN should be interpreted as LEFT
|
||
** and RIGHT, respectively. */
|
||
MmwHorzScroll(hWnd, wParam, (int)lParam);
|
||
break;
|
||
|
||
case WM_WININICHANGE:
|
||
/* We first save away the string passed in lParam,
|
||
then return because WM_ACTIVATE will cause our
|
||
wWndMsgSysChange message to get posted ..pault */
|
||
|
||
if (lParam != NULL)
|
||
{
|
||
bltszx((LPSTR) lParam, (LPSTR) szT);
|
||
|
||
/* Here we only care about [devices], [windows] or [intl] changes */
|
||
|
||
if (WCompSz(szT, szWindows) == 0)
|
||
wWininiChange |= wWininiChangeToWindows;
|
||
|
||
#ifdef DBCS /* was in JAPAN */
|
||
// We have to respond WININICHANGE immediately to deal with
|
||
// dispatch driver. For deleting printer DC, dispatch driver
|
||
// must be available. If do not so, syserr box comes up from
|
||
// GDI module.
|
||
|
||
if (WCompSz(szT, szDevices) == 0) {
|
||
if( vhWndCancelPrint == NULL ) {
|
||
MmwWinSysChange(WM_WININICHANGE);
|
||
wWininiChange = 0; // reset
|
||
}
|
||
else
|
||
wWininiChange |= wWininiChangeToDevices;
|
||
}
|
||
#else
|
||
if (WCompSz(szT, szDevices) == 0)
|
||
wWininiChange |= wWininiChangeToDevices;
|
||
#endif
|
||
|
||
if (WCompSz(szT, szIntl) == 0)
|
||
wWininiChange |= wWininiChangeToIntl;
|
||
|
||
lReturn = TRUE;
|
||
}
|
||
break;
|
||
case WM_DEVMODECHANGE:
|
||
/* See WM_WININICHANGE above */
|
||
|
||
if (lParam != NULL)
|
||
{
|
||
CHAR (**HszCreate())[];
|
||
bltszx((LPSTR) lParam, (LPSTR) szT);
|
||
|
||
/* was there another change before this? */
|
||
if (hszDevmodeChangeParam != NULL)
|
||
FreeH(hszDevmodeChangeParam);
|
||
hszDevmodeChangeParam = HszCreate(szT);
|
||
vfDevmodeChange = fTrue;
|
||
lReturn = TRUE;
|
||
}
|
||
break;
|
||
|
||
case WM_SYSCOLORCHANGE:
|
||
case WM_FONTCHANGE:
|
||
/* Post this message to handle soon */
|
||
PostMessage( hWnd, wWndMsgSysChange, message, (LONG) 0 );
|
||
lReturn = TRUE;
|
||
break;
|
||
|
||
case wWndMsgSysChange:
|
||
/* Handle postponed message from windows */
|
||
|
||
#ifdef DEBUG
|
||
if (wWininiChange != 0)
|
||
Assert(wWininiChange > 0 && wWininiChange < wWininiChangeMax);
|
||
#endif
|
||
MmwWinSysChange( wParam );
|
||
wWininiChange = 0; /* reset */
|
||
lReturn = TRUE;
|
||
break;
|
||
|
||
default:
|
||
/* Everything else comes here. This call MUST exist
|
||
** in your window proc. */
|
||
lReturn = DefWindowProc(hWnd, message, wParam, lParam);
|
||
break;
|
||
}
|
||
|
||
if (vfCloseFilesInDialog)
|
||
CloseEveryRfn( FALSE );
|
||
|
||
return lReturn;
|
||
}
|
||
|
||
|
||
void NEAR MmwPaint(hWnd)
|
||
HWND hWnd;
|
||
{
|
||
/* This window is completely covered by it's children; so, there is
|
||
no painting of this window to do. */
|
||
|
||
extern HWND vhWndRuler;
|
||
extern HWND vhWndSizeBox;
|
||
extern HWND vhWndPageInfo;
|
||
PAINTSTRUCT ps;
|
||
HDC hDC;
|
||
|
||
hDC = BeginPaint(hWnd, &ps); // this is causing nested BeginPaint calls,
|
||
DrawResizeHole(hWnd,hDC);
|
||
|
||
/* Paint the ruler if necessary. */
|
||
if (vhWndRuler != NULL)
|
||
{
|
||
UpdateWindow(vhWndRuler);
|
||
}
|
||
|
||
/* Paint the scroll bar controls. */
|
||
UpdateWindow(wwdCurrentDoc.hVScrBar);
|
||
UpdateWindow(wwdCurrentDoc.hHScrBar);
|
||
UpdateWindow(vhWndPageInfo);
|
||
|
||
/* Paint the document window. */
|
||
if (wwdCurrentDoc.wwptr != NULL)
|
||
{
|
||
UpdateWindow(wwdCurrentDoc.wwptr);
|
||
}
|
||
|
||
EndPaint(hWnd, &ps);
|
||
}
|
||
|
||
|
||
void MmwVertScroll(hWnd, code, posNew)
|
||
HWND hWnd;
|
||
WORD code;
|
||
int posNew;
|
||
{
|
||
extern int vfSeeSel;
|
||
extern int vfSeeEdgeSel;
|
||
|
||
/* There's nothing to do if we are just tracking the thumb. */
|
||
if (code == SB_THUMBTRACK)
|
||
{
|
||
return;
|
||
}
|
||
|
||
vfSeeSel = vfSeeEdgeSel = FALSE; /* So Idle doesn't override the scroll */
|
||
|
||
if (code == SB_THUMBPOSITION)
|
||
{
|
||
/* Position to posNew; we rely upon Idle() to redraw the screen. */
|
||
if (posNew != pwwdCur->drElevator)
|
||
{
|
||
ClearInsertLine();
|
||
DirtyCache(pwwdCur->cpFirst = (cpMacCur - pwwdCur->cpMin) * posNew
|
||
/ (drMax - 1) + pwwdCur->cpMin);
|
||
pwwdCur->ichCpFirst = 0;
|
||
pwwdCur->fCpBad = TRUE;
|
||
TrashWw(wwCur);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
switch (code)
|
||
{
|
||
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(wwDocument, fFalse);
|
||
}
|
||
}
|
||
|
||
|
||
void near MmwHorzScroll(hWnd, code, posNew)
|
||
HWND hWnd;
|
||
WORD code;
|
||
int posNew;
|
||
{
|
||
extern int vfSeeSel;
|
||
extern int vfSeeEdgeSel;
|
||
|
||
/* There's nothing to do if we are just tracking the thumb. */
|
||
if (code == SB_THUMBTRACK)
|
||
{
|
||
return;
|
||
}
|
||
|
||
vfSeeSel = vfSeeEdgeSel = FALSE; /* So Idle doesn't override the scroll */
|
||
|
||
switch (code)
|
||
{
|
||
case SB_LINEUP: /* line left */
|
||
ScrollRight(xpMinScroll);
|
||
break;
|
||
case SB_LINEDOWN: /* line right */
|
||
ScrollLeft(xpMinScroll);
|
||
break;
|
||
case SB_PAGEUP: /* page left */
|
||
ScrollRight(wwdCurrentDoc.xpMac - xpSelBar);
|
||
break;
|
||
case SB_PAGEDOWN: /* page right */
|
||
ScrollLeft(wwdCurrentDoc.xpMac - xpSelBar);
|
||
break;
|
||
case SB_THUMBPOSITION:
|
||
/* position to posNew */
|
||
AdjWwHoriz(posNew - wwdCurrentDoc.xpMin);
|
||
break;
|
||
}
|
||
}
|
||
|
||
static void DrawResizeHole(HWND hWnd, HDC hDC)
|
||
/* There's now a hole in the bottom right corner where
|
||
the size box used to be, so need to fill it in! */
|
||
{
|
||
RECT rcSB,rcClient;
|
||
HBRUSH hbr, hbrPrev;
|
||
|
||
GetClientRect(hWnd,&rcClient);
|
||
|
||
rcSB.left = rcClient.right - dxpScrlBar;
|
||
rcSB.right = rcClient.right;
|
||
rcSB.top = rcClient.bottom - dypScrlBar;
|
||
rcSB.bottom = rcClient.bottom;
|
||
|
||
if ((hbr = CreateSolidBrush(GetSysColor(COLOR_SCROLLBAR))) == NULL)
|
||
hbr = GetStockObject(GRAY_BRUSH);
|
||
hbrPrev = SelectObject(hDC, hbr);
|
||
FillRect(hDC, (LPRECT)&rcSB, hbr);
|
||
|
||
SelectObject(hDC, hbrPrev);
|
||
DeleteObject(hbr);
|
||
}
|
||
|
||
|