File:  [WindowsNT SDKs] / mstools / mfc / samples / showfont / drawing.cpp
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs
Thu Aug 9 18:22:20 2018 UTC (7 years, 9 months ago) by root
Branches: msft, MAIN
CVS tags: ntsdk-oct-1992, ntsdk-jul-1993, HEAD
Microsoft Windows NT Build 328 10-12-1992

// drawing.cpp : Drawing functions for the ShowFont main window.
//
// This is a part of the Microsoft Foundation Classes C++ library. 
// Copyright (C) 1992 Microsoft Corporation 
// All rights reserved. 
//  
// This source code is only intended as a supplement to the 
// Microsoft Foundation Classes Reference and Microsoft 
// QuickHelp documentation provided with the library. 
// See these sources for detailed information regarding the 
// Microsoft Foundation Classes product.

#include "showfont.h"

/////////////////////////////////////////////////////////////////////////////

// InitDC:
// Prepare for drawing in this DC.
//
void CMainWindow::InitDC(CDC& dc)
{
	dc.SetBkMode(nBkMode);
	dc.SetBkColor(rgbBkColor);
	dc.SetTextColor(rgbTextColor);
	dc.SetTextAlign(nAlignLCR | nAlignTBB);
}

/////////////////////////////////////////////////////////////////////////////

// GetStringExtent:
// A helper function which calculates the extent of a string in a given font.
//
static int GetStringExtent(CDC& dc, PSTR pString, CFont* font)
{
	CFont* oldFont = dc.SelectObject(font);
	if (oldFont == NULL)
		return 0;

	CSize sizeExtent = dc.GetTextExtent(pString, strlen(pString));
	dc.SelectObject(oldFont);
	return (sizeExtent.cx);
}

/////////////////////////////////////////////////////////////////////////////

// StringOut:
// Helper routine for font-specific text out.
//
static int StringOut(CDC& dc, short x, short y, PSTR pString, CFont* newFont)
{
	CFont* oldFont = dc.SelectObject(newFont);
	if (oldFont == NULL)
		return 0;
	CSize sizeExtent = dc.GetTextExtent(pString, strlen(pString));
	dc.TextOut(x, y, pString, strlen(pString));
	dc.SelectObject(oldFont);
	return (sizeExtent.cx);
}

/////////////////////////////////////////////////////////////////////////////

// ShowString:
// Draw the string in the client area of this window at the current point.
//
void CMainWindow::ShowString()
{
	short nAlign;
	CFont italicFont, underlineFont, strikeOutFont, boldFont;

	LOGFONT logFont;
	pTheFont->GetObject(sizeof(LOGFONT), &logFont);
	logFont.lfItalic = TRUE;
	italicFont.CreateFontIndirect(&logFont);

	logFont.lfItalic = FALSE;
	logFont.lfUnderline = TRUE;
	underlineFont.CreateFontIndirect(&logFont);

	logFont.lfUnderline = FALSE;
	logFont.lfStrikeOut = TRUE;
	strikeOutFont.CreateFontIndirect(&logFont);

	logFont.lfStrikeOut = FALSE;
	logFont.lfWeight = FW_BOLD;
	boldFont.CreateFontIndirect(&logFont);

	// Draw text examples.
	//
	CClientDC dc(this);
	InitDC(dc);
	int x = ptCurrent.x;
	int y = ptCurrent.y;

	nAlign =  nAlignLCR | nAlignTBB;    /* GetTextAlign(hDC); */

	if ((nAlign & TA_CENTER) == TA_CENTER)
	{
		int tmpX = x;
		nAlignLCR = TA_LEFT;
		dc.SetTextAlign(nAlignLCR | nAlignTBB);
		x += StringOut(dc, x, y, ", and ", pTheFont);
		x += StringOut(dc, x, y, "strikeout", &strikeOutFont);
		x += StringOut(dc, x, y, " in a single line.", pTheFont);
		x = tmpX;

		nAlignLCR = TA_RIGHT;
		dc.SetTextAlign(nAlignLCR | nAlignTBB);
		x -= StringOut(dc, x, y, "underline", &underlineFont);
		x -= StringOut(dc, x, y, ", ", pTheFont);
		x -= StringOut(dc, x, y, "italic", &italicFont);
		x -= StringOut(dc, x, y, ", ", pTheFont);
		x -= StringOut(dc, x, y, "bold", &boldFont);
		x -= StringOut(dc, x, y, "You can use ", pTheFont);
		nAlignLCR = TA_CENTER;
	}
	else if ((nAlign & TA_CENTER) == TA_RIGHT)
	{
		x -= StringOut(dc, x, y, " in a single line.", pTheFont);
		x -= StringOut(dc, x, y, "strikeout", &strikeOutFont);
		x -= StringOut(dc, x, y, ", and ", pTheFont);
		x -= StringOut(dc, x, y, "underline", &underlineFont);
		x -= StringOut(dc, x, y, ", ", pTheFont);
		x -= StringOut(dc, x, y, "italic", &italicFont);
		x -= StringOut(dc, x, y, ", ", pTheFont);
		x -= StringOut(dc, x, y, "bold", &boldFont);
		x -= StringOut(dc, x, y, "You can use ", pTheFont);
	}
	else
	{
		x += StringOut(dc, x, y, "You can use ", pTheFont);
		x += StringOut(dc, x, y, "bold", &boldFont);
		x += StringOut(dc, x, y, ", ", pTheFont);
		x += StringOut(dc, x, y, "italic", &italicFont);
		x += StringOut(dc, x, y, ", ", pTheFont);
		x += StringOut(dc, x, y, "underline", &underlineFont);
		x += StringOut(dc, x, y, ", and ", pTheFont);
		x += StringOut(dc, x, y, "strikeout", &strikeOutFont);
		x += StringOut(dc, x, y, " in a single line.", pTheFont);
	}
}

/////////////////////////////////////////////////////////////////////////////

// ShowCharacterSet:
// Similar to ShowString, but show the entire character set in four rows.
//
void ShowCharacterSet(CDC& dc, CFont* newFont)
{
	CFont* oldFont = dc.SelectObject(newFont);
	if (oldFont == NULL)
		return;

	TEXTMETRIC TextMetric;

	dc.GetTextMetrics(&TextMetric);
	nLineSpace = (TextMetric.tmHeight + TextMetric.tmExternalLeading)*2;

	int y = ptCurrent.y;
	for (int iLine = 0; iLine < 4; iLine++)
	{
		dc.TextOut(ptCurrent.x, y, outputText[iLine], 64);
		y += nLineSpace;
	}
	dc.SelectObject(oldFont);
}


unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.