|
|
1.1 root 1: // drawing.cpp : Drawing functions for the ShowFont main window.
2: //
3: // This is a part of the Microsoft Foundation Classes C++ library.
4: // Copyright (C) 1992 Microsoft Corporation
5: // All rights reserved.
6: //
7: // This source code is only intended as a supplement to the
8: // Microsoft Foundation Classes Reference and Microsoft
9: // QuickHelp documentation provided with the library.
10: // See these sources for detailed information regarding the
11: // Microsoft Foundation Classes product.
12:
13: #include "showfont.h"
14:
15: /////////////////////////////////////////////////////////////////////////////
16:
17: // InitDC:
18: // Prepare for drawing in this DC.
19: //
20: void CMainWindow::InitDC(CDC& dc)
21: {
22: dc.SetBkMode(nBkMode);
23: dc.SetBkColor(rgbBkColor);
24: dc.SetTextColor(rgbTextColor);
25: dc.SetTextAlign(nAlignLCR | nAlignTBB);
26: }
27:
28: /////////////////////////////////////////////////////////////////////////////
29:
30: // GetStringExtent:
31: // A helper function which calculates the extent of a string in a given font.
32: //
33: static short GetStringExtent(CDC& dc, PSTR pString, CFont* font)
34: {
35: CFont* oldFont = dc.SelectObject(font);
36: if (oldFont == NULL)
37: return 0;
38:
39: CSize sizeExtent = dc.GetTextExtent(pString, strlen(pString));
40: dc.SelectObject(oldFont);
41: return (sizeExtent.cx);
42: }
43:
44: /////////////////////////////////////////////////////////////////////////////
45:
46: // StringOut:
47: // Helper routine for font-specific text out.
48: //
49: static short StringOut(CDC& dc, short x, short y, PSTR pString, CFont* newFont)
50: {
51: CFont* oldFont = dc.SelectObject(newFont);
52: if (oldFont == NULL)
53: return 0;
54: CSize sizeExtent = dc.GetTextExtent(pString, strlen(pString));
55: dc.TextOut(x, y, pString, strlen(pString));
56: dc.SelectObject(oldFont);
57: return (sizeExtent.cx);
58: }
59:
60: /////////////////////////////////////////////////////////////////////////////
61:
62: // ShowString:
63: // Draw the string in the client area of this window at the current point.
64: //
65: void CMainWindow::ShowString()
66: {
67: short nAlign;
68: CFont italicFont, underlineFont, strikeOutFont, boldFont;
69:
70: LOGFONT logFont;
71: pTheFont->GetObject(sizeof(LOGFONT), &logFont);
72: logFont.lfItalic = TRUE;
73: italicFont.CreateFontIndirect(&logFont);
74:
75: logFont.lfItalic = FALSE;
76: logFont.lfUnderline = TRUE;
77: underlineFont.CreateFontIndirect(&logFont);
78:
79: logFont.lfUnderline = FALSE;
80: logFont.lfStrikeOut = TRUE;
81: strikeOutFont.CreateFontIndirect(&logFont);
82:
83: logFont.lfStrikeOut = FALSE;
84: logFont.lfWeight = FW_BOLD;
85: boldFont.CreateFontIndirect(&logFont);
86:
87: // Draw text examples.
88: //
89: CClientDC dc(this);
90: InitDC(dc);
91: int x = ptCurrent.x;
92: int y = ptCurrent.y;
93:
94: nAlign = nAlignLCR | nAlignTBB; /* GetTextAlign(hDC); */
95:
96: if ((nAlign & TA_CENTER) == TA_CENTER)
97: {
98: int tmpX = x;
99: nAlignLCR = TA_LEFT;
100: dc.SetTextAlign(nAlignLCR | nAlignTBB);
101: x += StringOut(dc, x, y, ", and ", pTheFont);
102: x += StringOut(dc, x, y, "strikeout", &strikeOutFont);
103: x += StringOut(dc, x, y, " in a single line.", pTheFont);
104: x = tmpX;
105:
106: nAlignLCR = TA_RIGHT;
107: dc.SetTextAlign(nAlignLCR | nAlignTBB);
108: x -= StringOut(dc, x, y, "underline", &underlineFont);
109: x -= StringOut(dc, x, y, ", ", pTheFont);
110: x -= StringOut(dc, x, y, "italic", &italicFont);
111: x -= StringOut(dc, x, y, ", ", pTheFont);
112: x -= StringOut(dc, x, y, "bold", &boldFont);
113: x -= StringOut(dc, x, y, "You can use ", pTheFont);
114: nAlignLCR = TA_CENTER;
115: }
116: else if ((nAlign & TA_CENTER) == TA_RIGHT)
117: {
118: x -= StringOut(dc, x, y, " in a single line.", pTheFont);
119: x -= StringOut(dc, x, y, "strikeout", &strikeOutFont);
120: x -= StringOut(dc, x, y, ", and ", pTheFont);
121: x -= StringOut(dc, x, y, "underline", &underlineFont);
122: x -= StringOut(dc, x, y, ", ", pTheFont);
123: x -= StringOut(dc, x, y, "italic", &italicFont);
124: x -= StringOut(dc, x, y, ", ", pTheFont);
125: x -= StringOut(dc, x, y, "bold", &boldFont);
126: x -= StringOut(dc, x, y, "You can use ", pTheFont);
127: }
128: else
129: {
130: x += StringOut(dc, x, y, "You can use ", pTheFont);
131: x += StringOut(dc, x, y, "bold", &boldFont);
132: x += StringOut(dc, x, y, ", ", pTheFont);
133: x += StringOut(dc, x, y, "italic", &italicFont);
134: x += StringOut(dc, x, y, ", ", pTheFont);
135: x += StringOut(dc, x, y, "underline", &underlineFont);
136: x += StringOut(dc, x, y, ", and ", pTheFont);
137: x += StringOut(dc, x, y, "strikeout", &strikeOutFont);
138: x += StringOut(dc, x, y, " in a single line.", pTheFont);
139: }
140: }
141:
142: /////////////////////////////////////////////////////////////////////////////
143:
144: // ShowCharacterSet:
145: // Similar to ShowString, but show the entire character set in four rows.
146: //
147: void ShowCharacterSet(CDC& dc, CFont* newFont)
148: {
149: CFont* oldFont = dc.SelectObject(newFont);
150: if (oldFont == NULL)
151: return;
152:
153: TEXTMETRIC TextMetric;
154:
155: dc.GetTextMetrics(&TextMetric);
156: nLineSpace = (TextMetric.tmHeight + TextMetric.tmExternalLeading)*2;
157:
158: int y = ptCurrent.y;
159: for (int iLine = 0; iLine < 4; iLine++)
160: {
161: dc.TextOut(ptCurrent.x, y, outputText[iLine], 64);
162: y += nLineSpace;
163: }
164: dc.SelectObject(oldFont);
165: }
166:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.