GLOBALS.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:4k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // This is a part of the Microsoft Foundation Classes C++ library.
  2. // Copyright (C) 1992-1998 Microsoft Corporation
  3. // All rights reserved.
  4. //
  5. // This source code is only intended as a supplement to the
  6. // Microsoft Foundation Classes Reference and related
  7. // electronic documentation provided with the library.
  8. // See these sources for detailed information regarding the
  9. // Microsoft Foundation Classes product.
  10. #include "stdafx.h"
  11. #include "globals.h"
  12. /////////////////////////////////////////////////////////////////////////////
  13. // Cached system metrics, etc
  14. GLOBAL_DATA globalData;
  15. // Initialization code
  16. GLOBAL_DATA::GLOBAL_DATA()
  17. {
  18. // Cache various target platform version information
  19. DWORD dwVersion = ::GetVersion();
  20. nWinVer = (LOBYTE(dwVersion) << 8) + HIBYTE(dwVersion);
  21. bWin32s = (dwVersion & 0x80000000) != 0;
  22. bWin4 = (BYTE)dwVersion >= 4;
  23. bNotWin4 = 1 - bWin4;   // for convenience
  24. bSmCaption = bWin4;
  25. bWin31 = bWin32s && !bWin4; // Windows 95 reports Win32s
  26. // Cached system metrics (updated in CWnd::OnWinIniChange)
  27. UpdateSysMetrics();
  28. // Border attributes
  29. hbrLtGray = ::CreateSolidBrush(RGB(192, 192, 192));
  30. hbrDkGray = ::CreateSolidBrush(RGB(128, 128, 128));
  31. ASSERT(hbrLtGray != NULL);
  32. ASSERT(hbrDkGray != NULL);
  33. // Cached system values (updated in CWnd::OnSysColorChange)
  34. hbrBtnFace = NULL;
  35. hbrBtnShadow = NULL;
  36. hbrBtnHilite = NULL;
  37. hbrWindowFrame = NULL;
  38. hpenBtnShadow = NULL;
  39. hpenBtnHilite = NULL;
  40. hpenBtnText = NULL;
  41. UpdateSysColors();
  42. // cxBorder2 and cyBorder are 2x borders for Win4
  43. cxBorder2 = bWin4 ? CX_BORDER*2 : CX_BORDER;
  44. cyBorder2 = bWin4 ? CY_BORDER*2 : CY_BORDER;
  45. // allocated on demand
  46. hStatusFont = NULL;
  47. hToolTipsFont = NULL;
  48. }
  49. // Termination code
  50. GLOBAL_DATA::~GLOBAL_DATA()
  51. {
  52. // cleanup standard brushes
  53. AfxDeleteObject((HGDIOBJ*)&hbrLtGray);
  54. AfxDeleteObject((HGDIOBJ*)&hbrDkGray);
  55. AfxDeleteObject((HGDIOBJ*)&hbrBtnFace);
  56. AfxDeleteObject((HGDIOBJ*)&hbrBtnShadow);
  57. AfxDeleteObject((HGDIOBJ*)&hbrBtnHilite);
  58. AfxDeleteObject((HGDIOBJ*)&hbrWindowFrame);
  59. // cleanup standard pens
  60. AfxDeleteObject((HGDIOBJ*)&hpenBtnShadow);
  61. AfxDeleteObject((HGDIOBJ*)&hpenBtnHilite);
  62. AfxDeleteObject((HGDIOBJ*)&hpenBtnText);
  63. // clean up objects we don't actually create
  64. AfxDeleteObject((HGDIOBJ*)&hStatusFont);
  65. AfxDeleteObject((HGDIOBJ*)&hToolTipsFont);
  66. }
  67. void GLOBAL_DATA::UpdateSysColors()
  68. {
  69. clrBtnFace = ::GetSysColor(COLOR_BTNFACE);
  70. clrBtnShadow = ::GetSysColor(COLOR_BTNSHADOW);
  71. clrBtnHilite = ::GetSysColor(COLOR_BTNHIGHLIGHT);
  72. clrBtnText = ::GetSysColor(COLOR_BTNTEXT);
  73. clrWindowFrame = ::GetSysColor(COLOR_WINDOWFRAME);
  74. AfxDeleteObject((HGDIOBJ*)&hbrBtnFace);
  75. AfxDeleteObject((HGDIOBJ*)&hbrBtnShadow);
  76. AfxDeleteObject((HGDIOBJ*)&hbrBtnHilite);
  77. AfxDeleteObject((HGDIOBJ*)&hbrWindowFrame);
  78. hbrBtnFace = ::CreateSolidBrush(clrBtnFace);
  79. ASSERT(hbrBtnFace != NULL);
  80. hbrBtnShadow = ::CreateSolidBrush(clrBtnShadow);
  81. ASSERT(hbrBtnShadow != NULL);
  82. hbrBtnHilite = ::CreateSolidBrush(clrBtnHilite);
  83. ASSERT(hbrBtnHilite != NULL);
  84. hbrWindowFrame = ::CreateSolidBrush(clrWindowFrame);
  85. ASSERT(hbrWindowFrame != NULL);
  86. AfxDeleteObject((HGDIOBJ*)&hpenBtnShadow);
  87. AfxDeleteObject((HGDIOBJ*)&hpenBtnHilite);
  88. AfxDeleteObject((HGDIOBJ*)&hpenBtnText);
  89. hpenBtnShadow = ::CreatePen(PS_SOLID, 0, clrBtnShadow);
  90. ASSERT(hpenBtnShadow != NULL);
  91. hpenBtnHilite = ::CreatePen(PS_SOLID, 0, clrBtnHilite);
  92. ASSERT(hpenBtnHilite != NULL);
  93. hpenBtnText = ::CreatePen(PS_SOLID, 0, clrBtnText);
  94. ASSERT(hpenBtnText != NULL);
  95. }
  96. void GLOBAL_DATA::UpdateSysMetrics()
  97. {
  98. // Device metrics for screen
  99. HDC hDCScreen = GetDC(NULL);
  100. ASSERT(hDCScreen != NULL);
  101. cxPixelsPerInch = GetDeviceCaps(hDCScreen, LOGPIXELSX);
  102. cyPixelsPerInch = GetDeviceCaps(hDCScreen, LOGPIXELSY);
  103. ReleaseDC(NULL, hDCScreen);
  104. }
  105. /////////////////////////////////////////////////////////////////////////////