windows-nt/Source/XPSP1/NT/base/mvdm/wow16/write/pageinfo.c
2020-09-26 16:20:57 +08:00

165 lines
4.5 KiB
C

/************************************************************/
/* Windows Write, Copyright 1985-1992 Microsoft Corporation */
/************************************************************/
/* This file contains the window proc for the page info window. */
#include <windows.h>
#include "mw.h"
#include "cmddefs.h"
#include "fmtdefs.h"
#include "wwdefs.h"
#ifdef DBCS
#include "kanji.h"
#endif
/* D R A W M O D E */
DrawMode()
{
/* This routine forces the repainting of the page info window. */
extern HWND vhWndPageInfo;
InvalidateRect(vhWndPageInfo, (LPRECT)NULL, FALSE);
UpdateWindow(vhWndPageInfo);
}
long FAR PASCAL PageInfoWndProc(hWnd, message, wParam, lParam)
HWND hWnd;
unsigned message;
WORD wParam;
LONG lParam;
{
extern HFONT vhfPageInfo;
extern int ypszPageInfo;
extern CHAR szMode[];
extern int dypScrlBar;
extern struct FLI vfli;
extern struct WWD rgwwd[];
if (message == WM_PAINT)
{
PAINTSTRUCT ps;
/* Initialize the DC. */
BeginPaint(hWnd, (LPPAINTSTRUCT)&ps);
if (vhfPageInfo == NULL)
{
extern char szSystem[];
LOGFONT lf;
TEXTMETRIC tm;
/* Load a font that will fit in the info "window". */
bltbc(&lf, 0, sizeof(LOGFONT));
#ifdef WIN30
/* Don't default to ANY ol' typeface ..pault */
bltsz(szSystem, lf.lfFaceName);
#ifdef DBCS /* was in JAPAN; KenjiK ' 90-10-25 */
/* We use Double Byte Character string,so using font must be
able to show them. */
lf.lfCharSet = NATIVE_CHARSET;
// What this is for ? Teminal Font is not so good ! -- WJPARK
// bltbyte ( "Terminal", lf.lfFaceName, LF_FACESIZE);
#endif /* DBCS */
#endif
lf.lfHeight = -(dypScrlBar - (GetSystemMetrics(SM_CYBORDER) << 1));
if ((vhfPageInfo = CreateFontIndirect((LPLOGFONT)&lf)) == NULL)
{
goto BailOut;
}
if (SelectObject(ps.hdc, vhfPageInfo) == NULL)
{
DeleteObject(vhfPageInfo);
vhfPageInfo = NULL;
goto BailOut;
}
/* Figure out where to draw the string. */
GetTextMetrics(ps.hdc, (LPTEXTMETRIC)&tm);
#ifdef KOREA // jinwoo: 92, 9, 28
// It looks better in Hangeul Windows -- WJPark
ypszPageInfo = (dypScrlBar - (tm.tmHeight - tm.tmInternalLeading) +
1) >> 1;
#else
ypszPageInfo = ((dypScrlBar - (tm.tmHeight - tm.tmInternalLeading) +
1) >> 1) - tm.tmInternalLeading;
#endif // KOREA
}
/* Draw the "Page nnn" (no longer at the VERY left) */
PatBlt(ps.hdc, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right -
ps.rcPaint.left, ps.rcPaint.bottom - ps.rcPaint.top, PATCOPY);
TextOut(ps.hdc, GetSystemMetrics(SM_CXBORDER)+5, ypszPageInfo,
(LPSTR)szMode, CchSz(szMode) - 1);
BailOut:
EndPaint(hWnd, (LPPAINTSTRUCT)&ps);
return(0L);
}
else if (message == WM_RBUTTONDOWN && vfli.rgdxp[1] == 0xFFFE &&
wParam & MK_CONTROL )
{
(vfli.rgdxp[1])--;
return(0L);
}
else
{
/* All we are interested in here are paint messages. */
return(DefWindowProc(hWnd, message, wParam, lParam));
}
}
#ifdef SPECIAL
fnSpecial(hWnd, hDC, rgfp, sz)
HWND hWnd;
HDC hDC;
FARPROC rgfp[];
CHAR sz[];
{
RECT rc;
RECT rcText;
int dxpLine;
int dypLine;
{
register CHAR *pch = &sz[0];
while (*pch != '\0')
{
*pch = *pch ^ 0x13;
pch++;
}
}
(*rgfp[0])(hWnd, (LPRECT)&rc);
rc.right &= 0xFF80;
rc.bottom &= 0xFF80;
rcText.right = rc.right - (rcText.left = (rc.right >> 2) + (rc.right >> 3));
rcText.bottom = rc.bottom - (rcText.top = rc.bottom >> 2);
(*rgfp[1])(hDC, (LPSTR)sz, -1, (LPRECT)&rcText, DT_CENTER | DT_WORDBREAK);
dxpLine = rc.right >> 1;
dypLine = rc.bottom >> 1;
{
register int dxp;
register int dyp;
for (dxp = dyp = 0; dxp <= dxpLine; dxp += rc.right >> 6, dyp +=
rc.bottom
>> 6)
{
(*rgfp[2])(hDC, dxpLine - dxp, dyp);
(*rgfp[3])(hDC, dxp, dyp + dypLine);
(*rgfp[2])(hDC, dxpLine + dxp, dyp);
(*rgfp[3])(hDC, rc.right - dxp, dyp + dypLine);
}
}
}
#endif /* SPECIAL */