home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / C++-7 / DISK8 / MFC / SAMPLES / SHOWFONT / DRAWING.CP$ / drawing
Encoding:
Text File  |  1992-03-07  |  4.9 KB  |  167 lines

  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.  
  167.