WizFontExampleStatic.cpp
上传用户:xsxdsb
上传日期:2009-12-14
资源大小:672k
文件大小:3k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // WizFontExampleStatic.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "EnumFonts.h"
  5. #include "WizFontExampleStatic.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CWizFontExampleStatic
  13. CWizFontExampleStatic::CWizFontExampleStatic()
  14. {
  15. }
  16. CWizFontExampleStatic::~CWizFontExampleStatic()
  17. {
  18. }
  19. BEGIN_MESSAGE_MAP(CWizFontExampleStatic, CStatic)
  20. //{{AFX_MSG_MAP(CWizFontExampleStatic)
  21. ON_WM_PAINT()
  22. //}}AFX_MSG_MAP
  23. END_MESSAGE_MAP()
  24. /////////////////////////////////////////////////////////////////////////////
  25. // CWizFontExampleStatic message handlers
  26. //初始化字符串要使用的字体
  27. void CWizFontExampleStatic::SetFont (LPCTSTR fontname, int pp_size, BOOL bItal, BOOL bBold, BOOL bUnder)
  28. {
  29. memset (&m_lf, 0, sizeof(m_lf));
  30. m_lf.lfCharSet = DEFAULT_CHARSET;
  31. strcpy(m_lf.lfFaceName, fontname);
  32. m_lf.lfHeight = pp_size*10;
  33. m_lf.lfItalic = bItal;
  34. m_lf.lfUnderline = bUnder;
  35. m_lf.lfWeight = (bBold) ? FW_BOLD : FW_REGULAR;
  36. //获得设备场景
  37. CClientDC dc (this);
  38. if (m_Font.GetSafeHandle())
  39. m_Font.DeleteObject();
  40. //创建字体
  41. if (!m_Font.CreatePointFontIndirect(&m_lf, &dc))
  42. ASSERT(0); return;
  43. }
  44. CString text;
  45. TCHAR bold_ch = (bBold) ?  'B' : ' ';
  46. TCHAR ital_ch = (bItal) ?  'I' : ' ';
  47. TCHAR Under_ch = (bUnder) ?  'U' : ' ';
  48. text.Format (_T("%s size % d %c %c %c"), fontname, pp_size, bold_ch, ital_ch, Under_ch);
  49. m_strSample = text;
  50. //重画该窗体
  51. CWnd* parent = GetParent();
  52. if (parent)
  53. {
  54. CRect r;
  55. GetWindowRect(r);
  56. parent->ScreenToClient(&r);
  57. parent->InvalidateRect(r);
  58. parent->UpdateWindow();
  59. }
  60. Invalidate(TRUE);
  61. }
  62. //按设定的格式显示字符串
  63. void CWizFontExampleStatic::OnPaint() 
  64. {
  65. //获得设备场景
  66. CPaintDC dc(this); 
  67. CRect rcText;
  68. CFont *oldFont;
  69. CSize TextExtent;
  70. COLORREF crText;
  71. TEXTMETRIC tm;
  72. int bkMode, len, x, y;
  73. //要显示的字符串
  74. CString strSample = _T("AaBbYyZz ");
  75. strSample += m_strSample;
  76. if (!m_Font.GetSafeHandle())
  77. return;
  78. //获得客户区大小
  79. GetClientRect( &rcText );
  80. //将字体选进设备场景
  81. oldFont = dc.SelectObject( &m_Font );
  82. crText = dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
  83. bkMode = dc.SetBkMode(TRANSPARENT);
  84. //计算字符串的大小
  85. dc.GetTextMetrics( &tm );
  86. len = strSample.GetLength();
  87. TextExtent = dc.GetTextExtent(strSample, len);
  88. TextExtent.cy = tm.tmAscent - tm.tmInternalLeading;
  89. if ((TextExtent.cx >= (rcText.right - rcText.left)) ||
  90. (TextExtent.cx <= 0))
  91. x = rcText.left;
  92. else
  93. x = rcText.left + ((rcText.right - rcText.left) - TextExtent.cx) / 2;
  94. y = min(rcText.bottom,
  95. rcText.bottom - ((rcText.bottom - rcText.top) - TextExtent.cy) / 2);
  96. //显示字符串
  97. dc.ExtTextOut(x, y - (tm.tmAscent), ETO_CLIPPED, &rcText,
  98. strSample, len, NULL);
  99. dc.SetBkMode(bkMode);
  100. dc.SetTextColor(crText);
  101. //还原字体
  102. if (oldFont)
  103. dc.SelectObject(oldFont);
  104. }