home *** CD-ROM | disk | FTP | other *** search
/ Mastering Microsoft Visual C++ 4 (2nd Edition) / VisualC4.ISO / textdemo / textddoc.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-30  |  11.4 KB  |  448 lines

  1. // TextDDoc.cpp : implementation of the CTextDemoDoc class
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "TextDemo.h"
  6.  
  7. #include "TextDDoc.h"
  8.  
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14.  
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CTextDemoDoc
  17.  
  18. IMPLEMENT_DYNCREATE(CTextDemoDoc, CDocument)
  19.  
  20. BEGIN_MESSAGE_MAP(CTextDemoDoc, CDocument)
  21.    //{{AFX_MSG_MAP(CTextDemoDoc)
  22.    ON_COMMAND(ID_OPTIONS_FONT, OnOptionsFont)
  23.    //}}AFX_MSG_MAP
  24. END_MESSAGE_MAP()
  25.  
  26. /////////////////////////////////////////////////////////////////////////////
  27. // CTextDemoDoc construction/destruction
  28.  
  29. CTextDemoDoc::CTextDemoDoc()
  30. {
  31.    // TODO: add one-time construction code here
  32.  
  33. }
  34.  
  35. CTextDemoDoc::~CTextDemoDoc()
  36. {
  37. }
  38.  
  39. BOOL CTextDemoDoc::OnNewDocument()
  40. {
  41.    if (!CDocument::OnNewDocument())
  42.       return FALSE;
  43.  
  44.    // TODO: add reinitialization code here
  45.    // (SDI documents will reuse this document)
  46.  
  47.    return TRUE;
  48. }
  49.  
  50. /////////////////////////////////////////////////////////////////////////////
  51. // CTextDemoDoc serialization
  52.  
  53. void CTextDemoDoc::Serialize(CArchive& ar)
  54. {
  55.    if (ar.IsStoring())
  56.    {
  57.       // TODO: add storing code here
  58.    }
  59.    else
  60.    {
  61.       // TODO: add loading code here
  62.    }
  63. }
  64.  
  65. /////////////////////////////////////////////////////////////////////////////
  66. // CTextDemoDoc diagnostics
  67.  
  68. #ifdef _DEBUG
  69. void CTextDemoDoc::AssertValid() const
  70. {
  71.    CDocument::AssertValid();
  72. }
  73.  
  74. void CTextDemoDoc::Dump(CDumpContext& dc) const
  75. {
  76.    CDocument::Dump(dc);
  77. }
  78. #endif //_DEBUG
  79.  
  80. /////////////////////////////////////////////////////////////////////////////
  81. // CTextDemoDoc commands
  82.  
  83. void CTextDemoDoc::OnOptionsFont() 
  84. {
  85.    // TODO: Add your command handler code here
  86.    // display Font dialog box:           
  87.    CFontDialog FontDialog;
  88.    if (FontDialog.DoModal () != IDOK)
  89.       return;
  90.  
  91.    // set m_Color:
  92.    m_Color = FontDialog.GetColor ();  // get color chosen by user
  93.  
  94.    // initialize font object:
  95.    m_Font.DeleteObject ();
  96.    m_Font.CreateFontIndirect (&FontDialog.m_lf);
  97.  
  98.    // store values in m_LineTable:
  99.  
  100.    // store values chosen by user:
  101.    int Num = 0;
  102.  
  103.    m_LineTable [Num++] = "Font Name: " + FontDialog.GetFaceName (); 
  104.  
  105.    m_LineTable [Num] =   "Font Size: ";
  106.    char NumBuf [18];
  107.    sprintf
  108.       (NumBuf,"%d.%d points",
  109.       FontDialog.GetSize () / 10,
  110.       FontDialog.GetSize () % 10);
  111.    m_LineTable [Num++] += NumBuf;
  112.  
  113.    m_LineTable [Num++] = "";
  114.  
  115.    // store LOGFONT values:
  116.  
  117.    m_LineTable [Num++] = "LOGFONT fields:";
  118.  
  119.    m_LineTable [Num] =   "lfHeight: ";
  120.    sprintf (NumBuf,"%d",FontDialog.m_lf.lfHeight);
  121.    m_LineTable [Num++] += NumBuf;
  122.  
  123.    m_LineTable [Num] =   "lfWidth: ";
  124.    sprintf (NumBuf,"%d",FontDialog.m_lf.lfWidth);
  125.    m_LineTable [Num++] += NumBuf;
  126.  
  127.    m_LineTable [Num] =   "lfEscapement: ";
  128.    sprintf (NumBuf,"%d",FontDialog.m_lf.lfEscapement); 
  129.    m_LineTable [Num] += NumBuf;
  130.    m_LineTable [Num++] += " (tenths of a degree)";
  131.  
  132.    m_LineTable [Num] =   "lfOrientation: ";
  133.    sprintf (NumBuf,"%d",FontDialog.m_lf.lfOrientation); 
  134.    m_LineTable [Num] += NumBuf;
  135.    m_LineTable [Num++] += " (tenths of a degree)";
  136.  
  137.    m_LineTable [Num] =   "lfWeight: ";
  138.    sprintf (NumBuf,"%d",FontDialog.m_lf.lfWeight);
  139.    m_LineTable [Num++] += NumBuf;
  140.  
  141.    m_LineTable [Num] =   "lfItalic: ";
  142.    sprintf (NumBuf,"%d",FontDialog.m_lf.lfItalic);
  143.    m_LineTable [Num++] += NumBuf;
  144.  
  145.    m_LineTable [Num] =   "lfUnderline: ";
  146.    sprintf (NumBuf,"%d",FontDialog.m_lf.lfUnderline);
  147.    m_LineTable [Num++] += NumBuf;
  148.  
  149.    m_LineTable [Num] =   "lfStrikeOut: ";
  150.    sprintf (NumBuf,"%d",FontDialog.m_lf.lfStrikeOut);
  151.    m_LineTable [Num++] += NumBuf;
  152.  
  153.    m_LineTable [Num] = "lfCharSet: ";
  154.    switch (FontDialog.m_lf.lfCharSet)
  155.       {
  156.       case ANSI_CHARSET:
  157.          m_LineTable [Num++] += "ANSI_CHARSET";
  158.          break;
  159.  
  160.       case OEM_CHARSET:
  161.          m_LineTable [Num++] += "OEM_CHARSET";
  162.          break;
  163.  
  164.       case SYMBOL_CHARSET:
  165.          m_LineTable [Num++] += "SYMBOL_CHARSET";
  166.          break;
  167.  
  168.       default:
  169.          m_LineTable [Num++] += "unspecified character set";
  170.          break;
  171.       }
  172.  
  173.    m_LineTable [Num] = "lfOutPrecision: ";
  174.    switch (FontDialog.m_lf.lfOutPrecision)
  175.       {
  176.       case OUT_CHARACTER_PRECIS:
  177.          m_LineTable [Num++] += "OUT_CHARACTER_PRECIS";
  178.          break;
  179.  
  180.       case OUT_DEFAULT_PRECIS:
  181.          m_LineTable [Num++] += "OUT_DEFAULT_PRECIS";
  182.          break;
  183.  
  184.       case OUT_STRING_PRECIS:
  185.          m_LineTable [Num++] += "OUT_STRING_PRECIS";
  186.          break;
  187.  
  188.       case OUT_STROKE_PRECIS:
  189.          m_LineTable [Num++] += "OUT_STROKE_PRECIS";
  190.          break;
  191.  
  192.       default:
  193.          m_LineTable [Num++] += "unspecified output precision";
  194.          break;
  195.       }
  196.  
  197.    m_LineTable [Num] = "lfClipPrecision: ";
  198.    switch (FontDialog.m_lf.lfClipPrecision)
  199.       {
  200.       case CLIP_CHARACTER_PRECIS:
  201.          m_LineTable [Num++] += "CLIP_CHARACTER_PRECIS";
  202.          break;
  203.  
  204.       case CLIP_DEFAULT_PRECIS:
  205.          m_LineTable [Num++] += "CLIP_DEFAULT_PRECIS";
  206.          break;
  207.  
  208.       case CLIP_STROKE_PRECIS:
  209.          m_LineTable [Num++] += "CLIP_STROKE_PRECIS";
  210.          break;
  211.  
  212.       default:
  213.          m_LineTable [Num++] += "unspecified clipping precision";
  214.          break;
  215.       }
  216.  
  217.    m_LineTable [Num] = "lfQuality: ";
  218.    switch (FontDialog.m_lf.lfQuality)
  219.       {
  220.       case DEFAULT_QUALITY:
  221.          m_LineTable [Num++] += "DEFAULT_QUALITY";
  222.          break;
  223.  
  224.       case DRAFT_QUALITY:
  225.          m_LineTable [Num++] += "DRAFT_QUALITY";
  226.          break;
  227.  
  228.       case PROOF_QUALITY:
  229.          m_LineTable [Num++] += "PROOF_QUALITY";
  230.          break;
  231.  
  232.       default:
  233.          m_LineTable [Num++] += "unspecified output quality";
  234.          break;
  235.       }
  236.  
  237.    m_LineTable [Num] = "lfPitchAndFamily: ";
  238.    switch (FontDialog.m_lf.lfPitchAndFamily & 0x0003)
  239.       {
  240.       case DEFAULT_PITCH:
  241.          m_LineTable [Num] += "DEFAULT_PITCH; ";
  242.          break;
  243.  
  244.       case FIXED_PITCH:
  245.          m_LineTable [Num] += "FIXED_PITCH; ";
  246.          break;
  247.  
  248.       case VARIABLE_PITCH:
  249.          m_LineTable [Num] += "VARIABLE_PITCH; ";
  250.          break;
  251.  
  252.       default:
  253.          m_LineTable [Num] += "unspecified pitch; ";
  254.          break;
  255.       }
  256.    switch (FontDialog.m_lf.lfPitchAndFamily & 0x00F0)
  257.       {
  258.       case FF_DECORATIVE:
  259.          m_LineTable [Num++] += "FF_DECORATIVE";
  260.          break;
  261.  
  262.       case FF_DONTCARE:
  263.          m_LineTable [Num++] += "FF_DONTCARE";
  264.          break;
  265.  
  266.       case FF_MODERN:
  267.          m_LineTable [Num++] += "FF_MODERN";
  268.          break;
  269.  
  270.       case FF_ROMAN:
  271.          m_LineTable [Num++] += "FF_ROMAN";
  272.          break;
  273.  
  274.       case FF_SCRIPT:
  275.          m_LineTable [Num++] += "FF_SCRIPT";
  276.          break;
  277.  
  278.       case FF_SWISS:
  279.          m_LineTable [Num++] += "FF_SWISS";
  280.          break;
  281.  
  282.       default:
  283.          m_LineTable [Num++] += "unspecified family";
  284.          break;
  285.       }
  286.  
  287.    m_LineTable [Num] = "lfFaceName: ";
  288.    m_LineTable [Num++] += FontDialog.m_lf.lfFaceName;
  289.  
  290.    m_LineTable [Num++] = "";
  291.  
  292.    // store TEXTMETRIC values:
  293.  
  294.    // create a device context object associated with the view window:
  295.    POSITION Pos = GetFirstViewPosition ();
  296.    CView *PView = GetNextView (Pos);
  297.    CClientDC ClientDC (PView);
  298.  
  299.    // select new font into device context object:        
  300.    ClientDC.SelectObject (&m_Font);
  301.    TEXTMETRIC TM;
  302.    ClientDC.GetTextMetrics (&TM);
  303.  
  304.    m_LineTable [Num++] = "TEXTMETRIC fields:";
  305.  
  306.    m_LineTable [Num] = "tmHeight: ";
  307.    sprintf (NumBuf,"%d", TM.tmHeight);
  308.    m_LineTable [Num++] += NumBuf;
  309.  
  310.    m_LineTable [Num] = "tmAscent: ";
  311.    sprintf (NumBuf,"%d", TM.tmAscent);
  312.    m_LineTable [Num++] += NumBuf;
  313.  
  314.    m_LineTable [Num] = "tmDescent: ";
  315.    sprintf (NumBuf,"%d", TM.tmDescent);
  316.    m_LineTable [Num++] += NumBuf;
  317.  
  318.    m_LineTable [Num] = "tmInternalLeading: ";
  319.    sprintf (NumBuf,"%d", TM.tmInternalLeading);
  320.    m_LineTable [Num++] += NumBuf;
  321.  
  322.    m_LineTable [Num] = "tmExternalLeading: ";
  323.    sprintf (NumBuf,"%d", TM.tmExternalLeading);
  324.    m_LineTable [Num++] += NumBuf;
  325.  
  326.    m_LineTable [Num] = "tmAveCharWidth: ";
  327.    sprintf (NumBuf,"%d", TM.tmAveCharWidth);
  328.    m_LineTable [Num++] += NumBuf;
  329.  
  330.    m_LineTable [Num] = "tmMaxCharWidth: ";
  331.    sprintf (NumBuf,"%d", TM.tmMaxCharWidth);
  332.    m_LineTable [Num++] += NumBuf;
  333.  
  334.    m_LineTable [Num] = "tmWeight: ";
  335.    sprintf (NumBuf,"%d", TM.tmWeight);
  336.    m_LineTable [Num++] += NumBuf;
  337.  
  338.    m_LineTable [Num] = "tmOverhang: ";
  339.    sprintf (NumBuf,"%d", TM.tmOverhang);
  340.    m_LineTable [Num++] += NumBuf;
  341.  
  342.    m_LineTable [Num] = "tmDigitizedAspectX: ";
  343.    sprintf (NumBuf,"%d", TM.tmDigitizedAspectX);
  344.    m_LineTable [Num++] += NumBuf;
  345.  
  346.    m_LineTable [Num] = "tmDigitizedAspectY: ";
  347.    sprintf (NumBuf,"%d", TM.tmDigitizedAspectY);
  348.    m_LineTable [Num++] += NumBuf;
  349.  
  350.    m_LineTable [Num] = "tmFirstChar: ";
  351.    sprintf (NumBuf,"%d", TM.tmFirstChar);
  352.    m_LineTable [Num++] += NumBuf;
  353.  
  354.    m_LineTable [Num] = "tmLastChar: ";
  355.    sprintf (NumBuf,"%d", TM.tmLastChar);
  356.    m_LineTable [Num++] += NumBuf;
  357.  
  358.    m_LineTable [Num] = "tmDefaultChar: ";
  359.    sprintf (NumBuf,"%d", TM.tmDefaultChar);
  360.    m_LineTable [Num++] += NumBuf;
  361.  
  362.    m_LineTable [Num] = "tmBreakChar: ";
  363.    sprintf (NumBuf,"%d", TM.tmBreakChar);
  364.    m_LineTable [Num++] += NumBuf;
  365.  
  366.    m_LineTable [Num] = "tmItalic: ";
  367.    sprintf (NumBuf,"%d", TM.tmItalic);
  368.    m_LineTable [Num++] += NumBuf;
  369.  
  370.    m_LineTable [Num] = "tmUnderlined: ";
  371.    sprintf (NumBuf,"%d", TM.tmUnderlined);
  372.    m_LineTable [Num++] += NumBuf;
  373.  
  374.    m_LineTable [Num] = "tmStruckOut: ";
  375.    sprintf (NumBuf,"%d", TM.tmStruckOut);
  376.    m_LineTable [Num++] += NumBuf;
  377.  
  378.    m_LineTable [Num++] = "tmPitchAndFamily: ";
  379.  
  380.    m_LineTable [Num] = "   Pitch Info: ";
  381.    if (TM.tmPitchAndFamily & TMPF_FIXED_PITCH)
  382.       m_LineTable [Num] += "variable pitch   ";
  383.    else
  384.       m_LineTable [Num] += "fixed pitch   ";
  385.    if (TM.tmPitchAndFamily & TMPF_VECTOR)
  386.       m_LineTable [Num] += "vector font   ";
  387.    if (TM.tmPitchAndFamily & TMPF_TRUETYPE)
  388.       m_LineTable [Num] += "TrueType font   ";
  389.    if (TM.tmPitchAndFamily & TMPF_DEVICE)
  390.       m_LineTable [Num] += "device font";
  391.    Num++;
  392.  
  393.    m_LineTable [Num] = "   Family: ";
  394.    switch (TM.tmPitchAndFamily & 0x00F0)
  395.       {
  396.       case FF_DECORATIVE:
  397.          m_LineTable [Num++] += "FF_DECORATIVE";
  398.          break;
  399.  
  400.       case FF_DONTCARE:
  401.          m_LineTable [Num++] += "FF_DONTCARE";
  402.          break;
  403.  
  404.       case FF_MODERN:
  405.          m_LineTable [Num++] += "FF_MODERN";
  406.          break;
  407.  
  408.       case FF_ROMAN:
  409.          m_LineTable [Num++] += "FF_ROMAN";
  410.          break;
  411.  
  412.       case FF_SCRIPT:
  413.          m_LineTable [Num++] += "FF_SCRIPT";
  414.          break;
  415.  
  416.       case FF_SWISS:
  417.          m_LineTable [Num++] += "FF_SWISS";
  418.          break;
  419.  
  420.       default:
  421.          m_LineTable [Num++] += "unknown family";
  422.          break;
  423.       }
  424.  
  425.    m_LineTable [Num] = "tmCharSet: ";
  426.    switch (TM.tmCharSet)
  427.       {
  428.       case ANSI_CHARSET:
  429.          m_LineTable [Num++] += "ANSI_CHARSET";
  430.          break;
  431.  
  432.       case OEM_CHARSET:
  433.          m_LineTable [Num++] += "OEM_CHARSET";
  434.          break;
  435.  
  436.       case SYMBOL_CHARSET:
  437.          m_LineTable [Num++] += "SYMBOL_CHARSET";
  438.          break;
  439.  
  440.       default:
  441.          m_LineTable [Num++] += "unknown character set";
  442.          break;
  443.       }
  444.  
  445.    // force redrawing of view window:
  446.    UpdateAllViews (NULL);
  447. }
  448.