virtual int OnDraw(HDC hDC, const RECT * rcPaint) { int i; double scale; switch ( m_option ) { case IDM_VIEW_SMALL: scale = 32 * m_tt.GetScale(); for (i=0; i<256; i++) m_tt.DrawTTGlyph(hDC, 20+(i%16)*42, 40+(i/16)*42, m_Start+i, scale, 0); break; case IDM_VIEW_MEDIUM: scale = 96 * m_tt.GetScale(); for (i=0; i<70; i++) m_tt.DrawTTGlyph(hDC, 50+(i%10)*96, 80+(i/10)*96, m_Start+i, scale, 0); break; case IDM_VIEW_LARGE: case IDM_VIEW_LARGEPOINT: case IDM_VIEW_METRICS: scale = 384 * m_tt.GetScale(); m_tt.DrawTTGlyph(hDC, 200, 500, m_Start, scale, m_option); break; case IDM_VIEW_COMPARE: // compare simple rasterization with TrueType font engine scale = 32 * m_tt.GetScale(); // 32 point m_tt.DrawTTGlyph(hDC, 20, 40, 36, scale, false); // ABC m_tt.DrawTTGlyph(hDC, 20+26, 40, 37, scale, false); // ABC m_tt.DrawTTGlyph(hDC, 20+49, 40, 38, scale, false); // ABC ZoomRect(hDC, 18, 17, 92, 17+25, 100, 10, 4); { HFONT hFont = CreateFont(- 36 /** GetDeviceCaps(hDC, LOGPIXELSY) / 72*/, 0, 0, 0, FW_REGULAR, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, VARIABLE_PITCH, "Times New Roman"); HGDIOBJ hOld = SelectObject(hDC, hFont); TextOut(hDC, 20, 145,"ABC", 3); SelectObject(hDC, hOld); DeleteObject(hFont); } ZoomRect(hDC, 18, 145+7, 92, 145+7+26, 100, 150, 4); scale = 32 * 5 * m_tt.GetScale(); m_tt.DrawTTGlyph(hDC, 500, 180, 36, scale, false); // ABCD m_tt.DrawTTGlyph(hDC, 500+24*5, 180, 37, scale, false); // ABCD m_tt.DrawTTGlyph(hDC, 500+45*5, 180, 38, scale, false); // ABCD } return View_NoChange; }
void GetRect(Rect *zoomFrom, Rect *zoomTo) { static short numRects = 0; Rect theRect,drawRect; Point firstPt,curPt,oldPt; RgnHandle rgnHandle = NewRgn(); GrafPtr oldPort; GetPort(&oldPort); SetPort(GetWindowPort(gWindow)); PenMode(patXor); GetMouse(&firstPt); oldPt = firstPt; SetRect(&theRect,firstPt.h,firstPt.v,firstPt.h,firstPt.v); while (Button()) { GetMouse(&curPt); if (!EqualPt(curPt,oldPt)) { FixRect(&theRect,&drawRect); FrameRect(&drawRect); oldPt = curPt; theRect.right = curPt.h; theRect.bottom = curPt.v; FixRect(&theRect,&drawRect); FrameRect(&drawRect); QDFlushPortBuffer(GetWindowPort(gWindow), GetPortVisibleRegion(GetWindowPort(gWindow), rgnHandle)); } } FixRect(&theRect,&drawRect); if (numRects==0) *zoomFrom = drawRect; else *zoomTo = drawRect; numRects++; QDFlushPortBuffer(GetWindowPort(gWindow), GetPortVisibleRegion(GetWindowPort(gWindow), rgnHandle)); if (numRects >= 2) { ZoomRect(kZoomLarger, zoomFrom, zoomTo); numRects = 0; } PenNormal(); DisposeRgn(rgnHandle); SetPort(oldPort); }