📄 bcgglobals.cpp
字号:
//*******************************************************************************
// COPYRIGHT NOTES
// ---------------
// This is a part of the BCGControlBar Library
// Copyright (C) 1998-2000 BCGSoft Ltd.
// All rights reserved.
//
// This source code can be used, distributed or modified
// only under terms and conditions
// of the accompanying license agreement.
//*******************************************************************************
#include "stdafx.h"
#include "BCGCBPro.h"
#include "bcgglobals.h"
#include "BCGPVisualManager.h"
#include "BCGPKeyboardManager.h"
#include "MenuHash.h"
#include "BCGPToolBar.h"
#include "MenuImages.h"
#include "BCGPMiniframeWnd.h"
extern CObList gAllToolbars;
static const CString strOfficeFontName = _T("Tahoma");
static const CString strDefaultFontName = _T("MS Sans Serif");
static const CString strVertFontName = _T("Arial");
static const CString strMarlettFontName = _T("Marlett");
static int CALLBACK FontFamalyProcFonts (const LOGFONT FAR* lplf,
const TEXTMETRIC FAR* /*lptm*/,
ULONG /*ulFontType*/,
LPARAM /*lParam*/)
{
ASSERT (lplf != NULL);
CString strFont = lplf->lfFaceName;
return strFont.CollateNoCase (strOfficeFontName) == 0 ? 0 : 1;
}
/////////////////////////////////////////////////////////////////////////////
// Cached system metrics, etc
BCGCBPRODLLEXPORT GLOBAL_DATA globalData;
// Initialization code
GLOBAL_DATA::GLOBAL_DATA()
{
//---------------------------------------------------------
// Cached system values (updated in CWnd::OnSysColorChange)
//---------------------------------------------------------
hbrBtnShadow = NULL;
hbrBtnHilite = NULL;
hbrWindow = NULL;
UpdateSysColors();
m_hcurStretch = NULL;
m_hcurStretchVert = NULL;
m_hcurHand = NULL;
m_hcurSizeAll = NULL;
m_hiconTool = NULL;
UpdateFonts();
//-----------------------
// Shell icon sizes:
//-----------------------
CoInitialize (NULL);
SHFILEINFO sfi;
HIMAGELIST hil = NULL;
hil = (HIMAGELIST) ::SHGetFileInfo(_T(""), FILE_ATTRIBUTE_DIRECTORY, &sfi, sizeof sfi, SHGFI_SHELLICONSIZE | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
if (hil != NULL)
{
int cxIcon, cyIcon;
VERIFY(ImageList_GetIconSize(hil, &cxIcon, &cyIcon));
m_sizeSmallIcon.cx = cxIcon;
m_sizeSmallIcon.cy = cyIcon;
}
else
{
m_sizeSmallIcon.cx = ::GetSystemMetrics (SM_CXSMICON);
m_sizeSmallIcon.cy = ::GetSystemMetrics (SM_CYSMICON);
}
CoUninitialize ();
//-----------------------
// Detect the kind of OS:
//-----------------------
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
::GetVersionEx (&osvi);
bIsWindowsNT4 = ((osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) &&
(osvi.dwMajorVersion < 5));
bIsWindows9x = (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS);
m_nDragFrameThiknessFloat = 4; // pixels
m_nDragFrameThiknessDock = 3; // pixels
m_nAutoHideToolBarSpacing = 14; // pixels
m_nAutoHideToolBarMargin = 4; // pixels
m_nCoveredMainWndClientAreaPercent = 50; // percents
m_hinstUXThemeDLL = NULL;
m_nMaxToolTipWidth = -1;
}
//*******************************************************************************************
GLOBAL_DATA::~GLOBAL_DATA()
{
CleanUp ();
}
//************************************************************************************
void GLOBAL_DATA::UpdateFonts()
{
if (fontRegular.GetSafeHandle () != NULL)
{
::DeleteObject (fontRegular.Detach ());
}
if (fontTooltip.GetSafeHandle () != NULL)
{
::DeleteObject (fontTooltip.Detach ());
}
if (fontBold.GetSafeHandle () != NULL)
{
::DeleteObject (fontBold.Detach ());
}
if (fontUnderline.GetSafeHandle () != NULL)
{
::DeleteObject (fontUnderline.Detach ());
}
if (fontVert.GetSafeHandle () != NULL)
{
::DeleteObject (fontVert.Detach ());
}
if (fontVertCaption.GetSafeHandle () != NULL)
{
::DeleteObject (fontVertCaption.Detach ());
}
if (fontMarlett.GetSafeHandle () != NULL)
{
::DeleteObject (fontMarlett.Detach ());
}
//------------------
// Initialize fonts:
//------------------
NONCLIENTMETRICS info;
info.cbSize = sizeof(info);
::SystemParametersInfo (SPI_GETNONCLIENTMETRICS, sizeof(info), &info, 0);
LOGFONT lf;
memset (&lf, 0, sizeof (LOGFONT));
CWindowDC dc (NULL);
lf.lfCharSet = (BYTE) GetTextCharsetInfo (dc.GetSafeHdc (), NULL, 0);
lf.lfHeight = info.lfMenuFont.lfHeight;
lf.lfWeight = info.lfMenuFont.lfWeight;
lf.lfItalic = info.lfMenuFont.lfItalic;
//////////////////////////////////////////////
// // Check if we should use system font
//--------------------------------------------
_tcscpy (lf.lfFaceName, info.lfMenuFont.lfFaceName);
BOOL fUseSystemFont = (info.lfMenuFont.lfCharSet > SYMBOL_CHARSET);
if (!fUseSystemFont)
{
//----------------------------------
// Check for "Tahoma" font existance:
//----------------------------------
if (::EnumFontFamilies (dc.GetSafeHdc (), NULL, FontFamalyProcFonts, 0) == 0)
{
//---------------------------
// Found! Use MS Office font!
//---------------------------
_tcscpy (lf.lfFaceName, strOfficeFontName);
}
else
{
//-----------------------------
// Not found. Use default font:
//-----------------------------
_tcscpy (lf.lfFaceName, strDefaultFontName);
}
}
//--------------------------------------------
//////////////////////////////////////////////
fontRegular.CreateFontIndirect (&lf);
//---------------------
// Create tooltip font:
//---------------------
NONCLIENTMETRICS ncm;
memset (&ncm, 0, sizeof (NONCLIENTMETRICS));
ncm.cbSize = sizeof (NONCLIENTMETRICS);
::SystemParametersInfo (SPI_GETNONCLIENTMETRICS, sizeof (NONCLIENTMETRICS),
&ncm, 0);
lf.lfItalic = ncm.lfStatusFont.lfItalic;
lf.lfWeight = ncm.lfStatusFont.lfWeight;
fontTooltip.CreateFontIndirect (&lf);
lf.lfItalic = info.lfMenuFont.lfItalic;
lf.lfWeight = info.lfMenuFont.lfWeight;
//-------------------------
// Create "underline" font:
//-------------------------
lf.lfUnderline = TRUE;
fontUnderline.CreateFontIndirect (&lf);
lf.lfUnderline = FALSE;
//------------------
// Create bold font:
//------------------
lf.lfWeight = FW_BOLD;
fontBold.CreateFontIndirect (&lf);
//---------------------
// Create Marlett font:
//---------------------
BYTE bCharSet = lf.lfCharSet;
lf.lfWeight = info.lfMenuFont.lfWeight;
lf.lfCharSet = SYMBOL_CHARSET;
lf.lfWeight = 0;
lf.lfHeight = ::GetSystemMetrics (SM_CYMENUCHECK) - 1;
_tcscpy (lf.lfFaceName, strMarlettFontName);
fontMarlett.CreateFontIndirect (&lf);
lf.lfCharSet = bCharSet; // Restore charset
//----------------------
// Create vertical font:
//----------------------
CFont font;
if (font.CreateStockObject (DEFAULT_GUI_FONT))
{
if (font.GetLogFont (&lf) != 0)
{
lf.lfOrientation = 900;
lf.lfEscapement = 2700;
lf.lfHeight = info.lfMenuFont.lfHeight;
lf.lfWeight = info.lfMenuFont.lfWeight;
lf.lfItalic = info.lfMenuFont.lfItalic;
{
_tcscpy (lf.lfFaceName, strVertFontName);
}
//--------------------------------------------
//////////////////////////////////////////////
fontVert.CreateFontIndirect (&lf);
lf.lfEscapement = 900;
fontVertCaption.CreateFontIndirect (&lf);
}
}
UpdateTextMetrics();
//-------------------------------------
// Notify toolbars about font changing:
//-------------------------------------
for (POSITION posTlb = gAllToolbars.GetHeadPosition (); posTlb != NULL;)
{
CBCGPToolBar* pToolBar = (CBCGPToolBar*) gAllToolbars.GetNext (posTlb);
ASSERT (pToolBar != NULL);
if (CWnd::FromHandlePermanent (pToolBar->m_hWnd) != NULL)
{
ASSERT_VALID(pToolBar);
pToolBar->OnGlobalFontsChanged ();
}
}
}
//*******************************************************************************************
void GLOBAL_DATA::UpdateSysColors()
{
clrBarFace = clrBtnFace = ::GetSysColor(COLOR_BTNFACE);
clrBarShadow = clrBtnShadow = ::GetSysColor(COLOR_BTNSHADOW);
clrBarDkShadow = clrBtnDkShadow = ::GetSysColor(COLOR_3DDKSHADOW);
clrBarLight = clrBtnLight = ::GetSysColor(COLOR_3DLIGHT);
clrBarHilite = clrBtnHilite = ::GetSysColor(COLOR_BTNHIGHLIGHT);
clrBarText = clrBtnText = ::GetSysColor(COLOR_BTNTEXT);
clrGrayedText = ::GetSysColor (COLOR_GRAYTEXT);
clrWindowFrame = ::GetSysColor(COLOR_WINDOWFRAME);
clrHilite = ::GetSysColor(COLOR_HIGHLIGHT);
clrTextHilite = ::GetSysColor(COLOR_HIGHLIGHTTEXT);
clrBarWindow = clrWindow = ::GetSysColor (COLOR_WINDOW);
clrWindowText = ::GetSysColor (COLOR_WINDOWTEXT);
clrCaptionText = ::GetSysColor (COLOR_CAPTIONTEXT);
clrMenuText = ::GetSysColor (COLOR_MENUTEXT);
clrActiveCaption = ::GetSysColor (COLOR_ACTIVECAPTION);
clrInactiveCaption = ::GetSysColor (COLOR_INACTIVECAPTION);
clrActiveBorder = ::GetSysColor (COLOR_ACTIVEBORDER);
clrInactiveBorder = ::GetSysColor (COLOR_INACTIVEBORDER);
clrInactiveCaptionText = ::GetSysColor (COLOR_INACTIVECAPTIONTEXT);
#ifdef COLOR_HOTLIGHT
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
::GetVersionEx (&osvi);
if (osvi.dwMajorVersion >= 5)
{
clrHotText = ::GetSysColor (COLOR_HOTLIGHT);
}
else
#endif
{
clrHotText = RGB (0, 0, 255); // Light blue
}
hbrBtnShadow = ::GetSysColorBrush (COLOR_BTNSHADOW);
ASSERT(hbrBtnShadow != NULL);
hbrBtnHilite = ::GetSysColorBrush (COLOR_BTNHIGHLIGHT);
ASSERT(hbrBtnHilite != NULL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -