home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / mfc / src / auxdata.cpp < prev    next >
C/C++ Source or Header  |  1998-06-16  |  4KB  |  146 lines

  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.  
  11. #include "stdafx.h"
  12. #include <malloc.h>
  13.  
  14. #ifdef AFX_INIT_SEG
  15. #pragma code_seg(AFX_INIT_SEG)
  16. #endif
  17.  
  18. #ifdef _DEBUG
  19. #undef THIS_FILE
  20. static char THIS_FILE[] = __FILE__;
  21. #endif
  22.  
  23. #undef AfxEnableWin30Compatibility
  24. #undef AfxEnableWin40Compatibility
  25. #undef AfxEnableWin31Compatibility
  26.  
  27. /////////////////////////////////////////////////////////////////////////////
  28. // Cached system metrics, etc
  29.  
  30. AFX_DATADEF AUX_DATA afxData;
  31.  
  32. // Win40 compatibility is now the default.  It is not necessary to call
  33. // this if your application is marked as 4.0.  It is provided only for
  34. // backward compatibility.
  35. void AFXAPI AfxEnableWin40Compatibility()
  36. {
  37.     if (afxData.bWin4)
  38.     {
  39.         // Later versions of Windows report "correct" scrollbar metrics
  40.         // MFC assumes the old metrics, so they need to be adjusted.
  41.         afxData.cxVScroll = GetSystemMetrics(SM_CXVSCROLL) + CX_BORDER;
  42.         afxData.cyHScroll = GetSystemMetrics(SM_CYHSCROLL) + CY_BORDER;
  43.         afxData.bMarked4 = TRUE;
  44.     }
  45. }
  46.  
  47. // Call this API in your InitInstance if your application is marked
  48. // as a Windows 3.1 application.
  49. // This is done by linking with /subsystem:windows,3.1.
  50. void AFXAPI AfxEnableWin31Compatibility()
  51. {
  52.     afxData.cxVScroll = GetSystemMetrics(SM_CXVSCROLL);
  53.     afxData.cyHScroll = GetSystemMetrics(SM_CYHSCROLL);
  54.     afxData.bMarked4 = FALSE;
  55. }
  56.  
  57. // Initialization code
  58. AUX_DATA::AUX_DATA()
  59. {
  60.     // Cache various target platform version information
  61.     DWORD dwVersion = ::GetVersion();
  62.     nWinVer = (LOBYTE(dwVersion) << 8) + HIBYTE(dwVersion);
  63.     bWin95 = (dwVersion & 0x80000000) != 0;
  64.     bWin4 = (BYTE)dwVersion >= 4;
  65.     bNotWin4 = 1 - bWin4;   // for convenience
  66.     bSmCaption = bWin4;
  67.     bMarked4 = FALSE;
  68.  
  69.     // determine various metrics based on EXE subsystem version mark
  70.     if (bWin4)
  71.         bMarked4 = (GetProcessVersion(0) >= 0x00040000);
  72.  
  73.     // Cached system metrics (updated in CWnd::OnWinIniChange)
  74.     UpdateSysMetrics();
  75.  
  76.     // Cached system values (updated in CWnd::OnSysColorChange)
  77.     hbrBtnFace = NULL;
  78.     UpdateSysColors();
  79.  
  80.     // Standard cursors
  81.     hcurWait = ::LoadCursor(NULL, IDC_WAIT);
  82.     hcurArrow = ::LoadCursor(NULL, IDC_ARROW);
  83.     ASSERT(hcurWait != NULL);
  84.     ASSERT(hcurArrow != NULL);
  85.     hcurHelp = NULL;    // loaded on demand
  86.  
  87.     // cxBorder2 and cyBorder are 2x borders for Win4
  88.     cxBorder2 = bWin4 ? CX_BORDER*2 : CX_BORDER;
  89.     cyBorder2 = bWin4 ? CY_BORDER*2 : CY_BORDER;
  90.  
  91.     // allocated on demand
  92.     hbmMenuDot = NULL;
  93.     hcurHelp = NULL;
  94. }
  95.  
  96. #ifdef AFX_TERM_SEG
  97. #pragma code_seg(AFX_TERM_SEG)
  98. #endif
  99.  
  100. // Termination code
  101. AUX_DATA::~AUX_DATA()
  102. {
  103.     // clean up objects we don't actually create
  104.     AfxDeleteObject((HGDIOBJ*)&hbmMenuDot);
  105. }
  106.  
  107. #ifdef AFX_CORE1_SEG
  108. #pragma code_seg(AFX_CORE1_SEG)
  109. #endif
  110.  
  111. void AUX_DATA::UpdateSysColors()
  112. {
  113.     clrBtnFace = ::GetSysColor(COLOR_BTNFACE);
  114.     clrBtnShadow = ::GetSysColor(COLOR_BTNSHADOW);
  115.     clrBtnHilite = ::GetSysColor(COLOR_BTNHIGHLIGHT);
  116.     clrBtnText = ::GetSysColor(COLOR_BTNTEXT);
  117.     clrWindowFrame = ::GetSysColor(COLOR_WINDOWFRAME);
  118.  
  119.     hbrBtnFace = ::GetSysColorBrush(COLOR_BTNFACE);
  120.     ASSERT(hbrBtnFace != NULL);
  121.     hbrWindowFrame = ::GetSysColorBrush(COLOR_WINDOWFRAME);
  122.     ASSERT(hbrWindowFrame != NULL);
  123. }
  124.  
  125. void AUX_DATA::UpdateSysMetrics()
  126. {
  127.     // System metrics
  128.     cxIcon = GetSystemMetrics(SM_CXICON);
  129.     cyIcon = GetSystemMetrics(SM_CYICON);
  130.  
  131.     // System metrics which depend on subsystem version
  132.     if (bMarked4)
  133.         AfxEnableWin40Compatibility();
  134.     else
  135.         AfxEnableWin31Compatibility();
  136.  
  137.     // Device metrics for screen
  138.     HDC hDCScreen = GetDC(NULL);
  139.     ASSERT(hDCScreen != NULL);
  140.     cxPixelsPerInch = GetDeviceCaps(hDCScreen, LOGPIXELSX);
  141.     cyPixelsPerInch = GetDeviceCaps(hDCScreen, LOGPIXELSY);
  142.     ReleaseDC(NULL, hDCScreen);
  143. }
  144.  
  145. /////////////////////////////////////////////////////////////////////////////
  146.