📄 bcgglobals.cpp
字号:
hbrWindow = ::GetSysColorBrush (COLOR_WINDOW);
ASSERT(hbrWindow != NULL);
brBtnFace.DeleteObject ();
brBtnFace.CreateSolidBrush (clrBtnFace);
brBarFace.DeleteObject ();
brBarFace.CreateSolidBrush (clrBarFace);
brActiveCaption.DeleteObject ();
brActiveCaption.CreateSolidBrush (clrActiveCaption);
brInactiveCaption.DeleteObject ();
brInactiveCaption.CreateSolidBrush (clrInactiveCaption);
brHilite.DeleteObject ();
brHilite.CreateSolidBrush (clrHilite);
brBlack.DeleteObject ();
brBlack.CreateSolidBrush (clrBtnDkShadow);
brWindow.DeleteObject ();
brWindow.CreateSolidBrush (clrWindow);
CWindowDC dc (NULL);
m_nBitsPerPixel = dc.GetDeviceCaps (BITSPIXEL);
if (brLight.GetSafeHandle ())
{
brLight.DeleteObject ();
}
if (m_nBitsPerPixel > 8)
{
COLORREF clrLight = RGB (
GetRValue(clrBtnFace) + ((GetRValue(clrBtnHilite) -
GetRValue(clrBtnFace)) / 2 ),
GetGValue(clrBtnFace) + ((GetGValue(clrBtnHilite) -
GetGValue(clrBtnFace)) / 2),
GetBValue(clrBtnFace) + ((GetBValue(clrBtnHilite) -
GetBValue(clrBtnFace)) / 2)
);
brLight.CreateSolidBrush (clrLight);
}
else
{
HBITMAP hbmGray = CreateDitherBitmap (dc.GetSafeHdc ());
ASSERT (hbmGray != NULL);
CBitmap bmp;
bmp.Attach (hbmGray);
brLight.CreatePatternBrush (&bmp);
}
CMenuImages::CleanUp ();
}
//************************************************************************************
BOOL GLOBAL_DATA::SetMenuFont (LPLOGFONT lpLogFont, BOOL bHorz)
{
ASSERT (lpLogFont != NULL);
if (bHorz)
{
//---------------------
// Create regular font:
//---------------------
fontRegular.DeleteObject ();
if (!fontRegular.CreateFontIndirect (lpLogFont))
{
ASSERT (FALSE);
return FALSE;
}
//-----------------------
// Create underline font:
//-----------------------
lpLogFont->lfUnderline = TRUE;
fontUnderline.DeleteObject ();
fontUnderline.CreateFontIndirect (lpLogFont);
lpLogFont->lfUnderline = FALSE;
//---------------------------------------------------
// Create bold font (used in the default menu items):
//---------------------------------------------------
long lSavedWeight = lpLogFont->lfWeight;
lpLogFont->lfWeight = 700;
fontBold.DeleteObject ();
BOOL bResult = fontBold.CreateFontIndirect (lpLogFont);
lpLogFont->lfWeight = lSavedWeight; // Restore weight
if (!bResult)
{
ASSERT (FALSE);
return FALSE;
}
}
else // Vertical font
{
fontVert.DeleteObject ();
if (!fontVert.CreateFontIndirect (lpLogFont))
{
ASSERT (FALSE);
return FALSE;
}
}
UpdateTextMetrics();
return TRUE;
}
//************************************************************************************
void GLOBAL_DATA::UpdateTextMetrics ()
{
CWindowDC dc (NULL);
CFont* pOldFont = dc.SelectObject (&fontRegular);
ASSERT (pOldFont != NULL);
TEXTMETRIC tm;
dc.GetTextMetrics (&tm);
m_nTextHeightHorz = tm.tmHeight + 2;
dc.SelectObject (&fontVert);
dc.GetTextMetrics (&tm);
m_nTextHeightVert = tm.tmHeight + 2;
dc.SelectObject (pOldFont);
}
//*******************************************************************************
HBITMAP GLOBAL_DATA::CreateDitherBitmap (HDC hDC)
{
struct // BITMAPINFO with 16 colors
{
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[16];
}
bmi;
memset(&bmi, 0, sizeof(bmi));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = 8;
bmi.bmiHeader.biHeight = 8;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 1;
bmi.bmiHeader.biCompression = BI_RGB;
COLORREF clr = globalData.clrBtnFace;
bmi.bmiColors[0].rgbBlue = GetBValue(clr);
bmi.bmiColors[0].rgbGreen = GetGValue(clr);
bmi.bmiColors[0].rgbRed = GetRValue(clr);
clr = ::GetSysColor(COLOR_BTNHIGHLIGHT);
bmi.bmiColors[1].rgbBlue = GetBValue(clr);
bmi.bmiColors[1].rgbGreen = GetGValue(clr);
bmi.bmiColors[1].rgbRed = GetRValue(clr);
// initialize the brushes
long patGray[8];
for (int i = 0; i < 8; i++)
patGray[i] = (i & 1) ? 0xAAAA5555L : 0x5555AAAAL;
HBITMAP hbm = CreateDIBitmap(hDC, &bmi.bmiHeader, CBM_INIT,
(LPBYTE)patGray, (LPBITMAPINFO)&bmi, DIB_RGB_COLORS);
return hbm;
}
//*************************************************************************************
void GLOBAL_DATA::CleanUp ()
{
if (brLight.GetSafeHandle ())
{
brLight.DeleteObject ();
}
// cleanup fonts:
fontRegular.DeleteObject ();
fontBold.DeleteObject ();
fontUnderline.DeleteObject ();
fontVert.DeleteObject ();
fontVertCaption.DeleteObject ();
fontTooltip.DeleteObject ();
if (m_hinstUXThemeDLL != NULL)
{
::FreeLibrary (m_hinstUXThemeDLL);
m_hinstUXThemeDLL = NULL;
}
}
//*************************************************************************************
BCGCBPRODLLEXPORT void BCGCBProCleanUp ()
{
globalData.CleanUp ();
g_menuHash.CleanUp ();
CBCGPToolBar::CleanUpImages ();
CMenuImages::CleanUp ();
if (GetCmdMgr () != NULL)
{
GetCmdMgr ()->CleanUp ();
}
CBCGPKeyboardManager::CleanUp ();
// Destroy visualization manager:
CBCGPVisualManager* pVisManager = CBCGPVisualManager::GetInstance ();
if (pVisManager != NULL && pVisManager->IsAutoDestroy ())
{
delete pVisManager;
}
}
//****************************************************************************************
BOOL GLOBAL_DATA::DrawParentBackground (CWnd* pWnd, CDC* pDC, LPRECT rectClip)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pWnd);
BOOL bRes = FALSE;
if (rectClip != NULL)
{
CRgn rgn;
rgn.CreateRectRgnIndirect (rectClip);
pDC->SelectClipRgn (&rgn);
}
CWnd* pParent = pWnd->GetParent ();
ASSERT_VALID (pParent);
// In Windows XP, we need to call DrawThemeParentBackground function to implement
// transparent controls
if (m_hinstUXThemeDLL == NULL)
{
m_hinstUXThemeDLL = LoadLibrary (_T("UxTheme.dll"));
}
if (m_hinstUXThemeDLL != NULL)
{
typedef HRESULT (__stdcall * DRAWTHEMEPARENTBACKGROUND)(HWND hWnd, HDC hdc,const RECT *pRec);
DRAWTHEMEPARENTBACKGROUND m_pfDrawThemeBackground =
(DRAWTHEMEPARENTBACKGROUND)::GetProcAddress (m_hinstUXThemeDLL, "DrawThemeParentBackground");
if (m_pfDrawThemeBackground != NULL)
{
bRes = (*m_pfDrawThemeBackground) (pWnd->GetSafeHwnd (),
pDC->GetSafeHdc (), rectClip) == S_OK;
}
}
if (!bRes)
{
CPoint pt (0, 0);
pWnd->MapWindowPoints (pParent, &pt, 1);
pt = pDC->OffsetWindowOrg (pt.x, pt.y);
bRes = (BOOL) pParent->SendMessage (WM_ERASEBKGND, (WPARAM)pDC->m_hDC);
pDC->SetWindowOrg(pt.x, pt.y);
}
pDC->SelectClipRgn (NULL);
return bRes;
}
BCGCBPRODLLEXPORT CFrameWnd* BCGPGetParentFrame (const CWnd* pWnd)
{
if (pWnd->GetSafeHwnd () == NULL)
{
return NULL;
}
ASSERT_VALID (pWnd);
const CWnd* pParentWnd = pWnd;
while (pParentWnd != NULL)
{
if (pParentWnd->IsKindOf (RUNTIME_CLASS (CBCGPMiniFrameWnd)))
{
CBCGPMiniFrameWnd* pMiniFrame = DYNAMIC_DOWNCAST (CBCGPMiniFrameWnd, pParentWnd);
pParentWnd = pMiniFrame->GetParent ();
}
else
{
pParentWnd = pParentWnd->GetParent ();
}
if (pParentWnd == NULL)
{
return NULL;
}
if (pParentWnd->IsFrameWnd ())
{
return (CFrameWnd*)pParentWnd;
}
}
return NULL;
}
//***********************************************************************************
COLORREF GLOBAL_DATA::GetColor (int nColor)
{
switch (nColor)
{
case COLOR_BTNFACE: return clrBtnFace;
case COLOR_BTNSHADOW: return clrBtnShadow;
case COLOR_3DDKSHADOW: return clrBtnDkShadow;
case COLOR_3DLIGHT: return clrBtnLight;
case COLOR_BTNHIGHLIGHT: return clrBtnHilite;
case COLOR_BTNTEXT: return clrBtnText;
case COLOR_GRAYTEXT: return clrGrayedText;
case COLOR_WINDOWFRAME: return clrWindowFrame;
case COLOR_HIGHLIGHT: return clrHilite;
case COLOR_HIGHLIGHTTEXT: return clrTextHilite;
case COLOR_WINDOW: return clrWindow;
case COLOR_WINDOWTEXT: return clrWindowText;
case COLOR_CAPTIONTEXT: return clrCaptionText;
case COLOR_MENUTEXT: return clrMenuText;
case COLOR_ACTIVECAPTION: return clrActiveCaption;
case COLOR_INACTIVECAPTION: return clrInactiveCaption;
case COLOR_ACTIVEBORDER: return clrActiveBorder;
case COLOR_INACTIVEBORDER: return clrInactiveBorder;
case COLOR_INACTIVECAPTIONTEXT: return clrInactiveCaptionText;
}
return ::GetSysColor (nColor);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -