/************************************************************/ /* Windows Write, Copyright 1985-1992 Microsoft Corporation */ /************************************************************/ /* This file contains the window proc for the page info window. */ #include #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 */