CAutoFont.cpp
上传用户:hhs829
上传日期:2022-06-17
资源大小:586k
文件大小:2k
源码类别:

DirextX编程

开发平台:

Visual C++

  1. //
  2. // CAutoFont.cpp
  3. //
  4. #include <windows.h>
  5. #include "CAutoFont.h"
  6. ////////////////////////////////////////////////////////////////////////////////
  7. CAutoFont::CAutoFont()
  8. {
  9. mDC      = NULL;
  10. mNewFont = NULL;
  11. mOldFont = NULL;
  12. DefaultFont();
  13. }
  14. CAutoFont::CAutoFont(LOGFONT inFont)
  15. {
  16. mDC      = NULL;
  17. mNewFont = NULL;
  18. mOldFont = NULL;
  19. CreateFont(inFont);
  20. }
  21. CAutoFont::~CAutoFont()
  22. {
  23. RestoreToDC();
  24. }
  25. void CAutoFont::DefaultFont(void)
  26. {
  27. mLogFont.lfHeight      = -12;
  28. mLogFont.lfWidth       = 0;
  29. // Specifies the angle in tenths of degrees
  30. // If rotation font required, lfEscapement and lfOrientation must be the same
  31. mLogFont.lfEscapement  = 0;
  32. mLogFont.lfOrientation = 0;
  33. mLogFont.lfWeight      = FW_NORMAL;
  34. mLogFont.lfItalic      = 0;
  35. mLogFont.lfUnderline   = 0;
  36. mLogFont.lfStrikeOut   = 0;
  37. mLogFont.lfCharSet        = ANSI_CHARSET;
  38. mLogFont.lfOutPrecision   = OUT_DEFAULT_PRECIS;
  39. mLogFont.lfClipPrecision  = CLIP_DEFAULT_PRECIS;
  40. mLogFont.lfQuality        = PROOF_QUALITY;
  41. mLogFont.lfPitchAndFamily = VARIABLE_PITCH | FF_ROMAN;
  42. strcpy(mLogFont.lfFaceName, "Arial");
  43. }
  44. void CAutoFont::CreateFont(LOGFONT inFont)
  45. {
  46. RestoreToDC();
  47. mLogFont = inFont;
  48. mNewFont = CreateFontIndirect(&mLogFont);
  49. }
  50. void CAutoFont::CreateFont(const char * inFaceName)
  51. {
  52. RestoreToDC();
  53. strcpy(mLogFont.lfFaceName, inFaceName);
  54. mNewFont = CreateFontIndirect(&mLogFont);
  55. }
  56. void CAutoFont::CreateStockObject(int inIndex)
  57. {
  58. RestoreToDC();
  59. // It is not necessary to delete stock objects by calling DeleteObject,
  60. // but it is not harmful.
  61. if (inIndex >= OEM_FIXED_FONT && inIndex <= DEFAULT_GUI_FONT)
  62. {
  63. mNewFont = (HFONT) GetStockObject(inIndex);
  64. }
  65. }
  66. void CAutoFont::SelectToDC(HDC inTargetDC)
  67. {
  68. if (inTargetDC && mNewFont)
  69. {
  70. mDC      = inTargetDC;
  71. mOldFont = (HFONT) SelectObject(mDC, mNewFont);
  72. }
  73. }
  74. void CAutoFont::RestoreToDC(void)
  75. {
  76. if (mOldFont && mDC)
  77. {
  78. SelectObject(mDC, mOldFont);
  79. mOldFont = NULL;
  80. }
  81. if (mNewFont)
  82. {
  83. DeleteObject(mNewFont);
  84. mNewFont = NULL;
  85. }
  86. }