165 lines
4.5 KiB
C
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 */
|