⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bcgpwinxpvisualmanager.cpp

📁 远程网络监视程序的源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//*******************************************************************************
// 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.
//*******************************************************************************
//
// BCGWinXPVisualManager.cpp: implementation of the CBCGPWinXPVisualManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "BCGPWinXPVisualManager.h"
#include "BCGPPopupMenuBar.h"
#include "BCGPButton.h"
#include "BCGPDrawManager.h"
#include "BCGPBaseTabWnd.h"
#include "BCGPDockingControlBar.h"
#include "BCGPTasksPane.h"
#include "BCGPToolbarMenuButton.h"
#include "BCGPOutlookButton.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#if (defined(SCHEMA_STRINGS)) || (! defined(TMSCHEMA_H))

#define RP_GRIPPER			1
#define RP_GRIPPERVERT		2
#define RP_BAND				3

#define TP_BUTTON			1
#define TP_SEPARATOR		5
#define TP_SEPARATORVERT	6

#define WP_MINCAPTION		3
#define WP_MDIMINBUTTON		16
#define WP_MDICLOSEBUTTON	20
#define WP_MDIRESTOREBUTTON	22

#define BP_PUSHBUTTON		1
#define BP_RADIOBUTTON		2
#define BP_CHECKBOX			3
#define BP_GROUPBOX			4

#define SP_PANE				1

#define CP_DROPDOWNBUTTON	1

#define HP_HEADERITEM		1
#define HP_HEADERSORTARROW	4

#define SBP_SIZEBOX			10

#define TS_NORMAL			1
#define TS_HOT				2
#define TS_PRESSED			3
#define TS_DISABLED			4
#define TS_CHECKED			5
#define TS_HOTCHECKED		6

#define PBS_NORMAL			1
#define PBS_HOT				2
#define PBS_PRESSED			3
#define PBS_DISABLED		4
#define PBS_DEFAULTED		5

#define CBS_NORMAL			1
#define CBS_HOT				2
#define CBS_PUSHED			3
#define	CBS_DISABLED		4

#define CBXS_NORMAL			1
#define CBXS_HOT			2
#define CBXS_PRESSED		3
#define CBXS_DISABLED		4

#define CBS_UNCHECKEDNORMAL	1
#define CBS_UNCHECKEDHOT	2
#define CBS_UNCHECKEDPRESSED	3
#define CBS_UNCHECKEDDISABLED	4
#define CBS_CHECKEDNORMAL	5
#define CBS_CHECKEDHOT		6
#define CBS_CHECKEDPRESSED	7
#define CBS_CHECKEDDISABLED	8
#define CBS_MIXEDNORMAL		9
#define CBS_MIXEDHOT		10
#define CBS_MIXEDPRESSED	11
#define CBS_MIXEDDISABLED	12

#define MNCS_ACTIVE			1
#define MNCS_INACTIVE		2

#define TIBES_NORMAL		1
#define TIBES_HOT			2
#define TIBES_SELECTED		3
#define TIBES_DISABLED		4
#define TIBES_FOCUSED		5

#define HIS_NORMAL			1
#define HIS_HOT				2
#define HIS_PRESSED			3

#define HILS_NORMAL			1
#define HILS_HOT			2
#define HILS_PRESSED		3

#define HIRS_NORMAL			1
#define HIRS_HOT			2
#define HIRS_PRESSED		3

#define HSAS_SORTEDUP		1
#define HSAS_SORTEDDOWN		2

#define SZB_RIGHTALIGN		1
#define SZB_LEFTALIGN		2

#define EBP_HEADERBACKGROUND		1
#define EBP_NORMALGROUPBACKGROUND	5
#define EBP_NORMALGROUPCOLLAPSE		6
#define EBP_NORMALGROUPEXPAND		7
#define EBP_NORMALGROUPHEAD			8
#define EBP_SPECIALGROUPBACKGROUND	9
#define EBP_SPECIALGROUPCOLLAPSE	10
#define EBP_SPECIALGROUPEXPAND		11
#define EBP_SPECIALGROUPHEAD		12

#define EBNGC_NORMAL	1
#define EBNGC_HOT		2
#define EBNGC_PRESSED	3

#define EBNGE_NORMAL	1
#define EBNGE_HOT		2
#define EBNGE_PRESSED	3

#define EBSGC_NORMAL	1
#define EBSGC_HOT		2
#define EBSGC_PRESSED	3

#define EBSGE_NORMAL	1
#define EBSGE_HOT		2
#define EBSGE_PRESSED	3

#define TVP_GLYPH		2
#define GLPS_CLOSED		1
#define GLPS_OPENED		2

#endif

IMPLEMENT_DYNCREATE(CBCGPWinXPVisualManager, CBCGPVisualManagerXP)

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CBCGPWinXPVisualManager::CBCGPWinXPVisualManager(BOOL bIsTemporary) :
	CBCGPVisualManagerXP (bIsTemporary)
{
	m_bShadowHighlightedImage = FALSE;

	m_bOfficeStyleMenus = FALSE;

	m_nVertMargin = 12;
	m_nHorzMargin = 12;
	m_nGroupVertOffset = 15;
	m_nGroupCaptionHeight = 25;
	m_nGroupCaptionHorzOffset = 13;
	m_nGroupCaptionVertOffset = 7;
	m_nTasksHorzOffset = 12;
	m_nTasksIconHorzOffset = 5;
	m_nTasksIconVertOffset = 4;
	m_bActiveCaptions = TRUE;

	globalData.UpdateSysColors ();
	OnUpdateSystemColors ();
}

CBCGPWinXPVisualManager::~CBCGPWinXPVisualManager()
{
}

BOOL CBCGPWinXPVisualManager::IsWinXPThemeAvailible ()
{
	CBCGPWinXPVisualManager* pWinXPManager =
		DYNAMIC_DOWNCAST (CBCGPWinXPVisualManager, m_pVisManager);
	if (pWinXPManager != NULL)
	{
		return pWinXPManager->m_hThemeWindow != NULL;
	}

	// Create a temporary manager and check it:
	CBCGPWinXPVisualManager winXPManager (TRUE /* Temporary */);
	return winXPManager.m_hThemeWindow != NULL;
}

void CBCGPWinXPVisualManager::SetOfficeStyleMenus (BOOL bOn)
{
	m_bOfficeStyleMenus = bOn;
}

void CBCGPWinXPVisualManager::OnUpdateSystemColors ()
{
	CBCGPVisualManagerXP::OnUpdateSystemColors ();

	m_bShadowHighlightedImage = TRUE;

	CBCGPWinXPThemeManager::UpdateSystemColors ();

	if (m_hThemeWindow != NULL)
	{
		m_bShadowHighlightedImage = FALSE;
	}
}

void CBCGPWinXPVisualManager::OnDrawBarGripper (CDC* pDC, CRect rectGripper, BOOL bHorz,
									   CBCGPBaseControlBar* pBar)
{
	ASSERT_VALID (pDC);

	if (m_hThemeRebar == NULL)
	{
		CBCGPVisualManagerXP::OnDrawBarGripper (pDC, rectGripper, bHorz, pBar);
		return;
	}

	BOOL bSideBar = pBar != NULL && pBar->IsKindOf (RUNTIME_CLASS (CBCGPDockingControlBar));

	CRect rectFill = rectGripper;

	if (bSideBar)
	{
		bHorz = !bHorz;
	}

	COLORREF clrTextOld = pDC->SetTextColor (globalData.clrBtnShadow);
	COLORREF clrBkOld = pDC->SetBkColor (globalData.clrBtnFace);

	(*m_pfDrawThemeBackground) (m_hThemeRebar, pDC->GetSafeHdc(),
		bHorz ? RP_GRIPPER : RP_GRIPPERVERT, 0, &rectGripper, 0);

	if (bSideBar)
	{
		//------------------
		// Draw bar caption:
		//------------------
		int nOldBkMode = pDC->SetBkMode (OPAQUE);
		pDC->SetTextColor (globalData.clrBtnText);

		const CFont& font = CBCGPMenuBar::GetMenuFont (bHorz);

		CFont* pOldFont = pDC->SelectObject ((CFont*) &font);

		CString strCaption;
		pBar->GetWindowText (strCaption);
		strCaption = _T(" ") + strCaption + _T(" ");

		CRect rectText = rectGripper;
		UINT uiTextFormat = 0;

		TEXTMETRIC tm;
		pDC->GetTextMetrics (&tm);

		CPoint ptTextOffset (0, 0);
		if (bHorz)
		{
			ptTextOffset.y = (rectGripper.Height () - tm.tmHeight - 1) / 2;
		}
		else
		{
			ptTextOffset.x = (rectGripper.Width () - tm.tmHeight + 1) / 2;
		}

		if (bHorz)
		{
			rectText.top += ptTextOffset.y;
			pDC->DrawText (strCaption, &rectText, uiTextFormat);
		}
		else
		{
			rectText.left = rectText.right - ptTextOffset.x;
			rectText.top = rectGripper.top + ptTextOffset.y;
			rectText.bottom = rectGripper.top + 3 * ptTextOffset.y;

			uiTextFormat |= DT_NOCLIP;

			pDC->DrawText (strCaption, &rectText, uiTextFormat);
		}

		pDC->SelectObject(pOldFont);
		pDC->SetBkMode(nOldBkMode);
	}

	pDC->SetTextColor (clrTextOld);
	pDC->SetBkColor (clrBkOld);
}
//*************************************************************************************
void CBCGPWinXPVisualManager::OnFillBarBackground (CDC* pDC, CBCGPBaseControlBar* pBar,
									CRect rectClient, CRect rectClip,
									BOOL bNCArea)
{
	ASSERT_VALID (pBar);
	ASSERT_VALID (pDC);

	if (m_hThemeWindow == NULL ||
		pBar->IsDialogControl ())
	{
		CBCGPVisualManagerXP::OnFillBarBackground (pDC, pBar,rectClient, rectClip, bNCArea);
		return;
	}

	if (!m_bOfficeStyleMenus && pBar->IsKindOf (RUNTIME_CLASS (CBCGPPopupMenuBar)))
	{
		::FillRect (pDC->GetSafeHdc (), rectClient, ::GetSysColorBrush (COLOR_MENU));
		return;
	}

	CBCGPVisualManagerXP::OnFillBarBackground (pDC, pBar,rectClient, rectClip, bNCArea);
}
//*************************************************************************************
void CBCGPWinXPVisualManager::OnFillButtonInterior (CDC* pDC,
				CBCGPToolbarButton* pButton, CRect rect,
				CBCGPVisualManager::BCGBUTTON_STATE state)
{
	if (m_hThemeToolBar == NULL)
	{
		CBCGPVisualManagerXP::OnFillButtonInterior (pDC, pButton, rect, state);
		return;
	}

	if (m_bOfficeStyleMenus)
	{
		CBCGPToolbarMenuButton* pMenuButton = 
			DYNAMIC_DOWNCAST (CBCGPToolbarMenuButton, pButton);
		if (pMenuButton != NULL)
		{
			BOOL bIsMenuBar = pMenuButton->GetParentWnd () != NULL &&
				pMenuButton->GetParentWnd ()->IsKindOf (RUNTIME_CLASS (CBCGPMenuBar));

			BOOL bIsPopupMenu = pMenuButton->GetParentWnd () != NULL &&
				pMenuButton->GetParentWnd ()->IsKindOf (RUNTIME_CLASS (CBCGPPopupMenuBar));


			if (bIsPopupMenu || bIsMenuBar)
			{
				CBCGPVisualManagerXP::OnFillButtonInterior (pDC, pButton, rect, state);
				return;
			}
		}
	}

	int nState = TS_NORMAL;
	if (state == ButtonsIsPressed)
	{
		nState = TS_PRESSED;
	}
	else if (state == ButtonsIsHighlighted)
	{
		nState = TS_HOT;
	}
	
	if (pButton->m_nStyle & TBBS_CHECKED)
	{
		nState = (state == ButtonsIsHighlighted) ? TS_HOTCHECKED : TS_CHECKED;
	}

	if (pButton->m_nStyle & TBBS_DISABLED)
	{
		nState = TS_DISABLED;
	}

	(*m_pfDrawThemeBackground) (m_hThemeToolBar, pDC->GetSafeHdc(), TP_BUTTON, nState, &rect, 0);
}
//**************************************************************************************
COLORREF CBCGPWinXPVisualManager::GetToolbarButtonTextColor (CBCGPToolbarButton* pButton, 
														CBCGPVisualManager::BCGBUTTON_STATE state)
{
	ASSERT_VALID (pButton);

	if (m_hThemeToolBar == NULL ||
		pButton->IsKindOf (RUNTIME_CLASS (CBCGPOutlookButton)))
	{
		return CBCGPVisualManagerXP::GetToolbarButtonTextColor (pButton, state);
	}

	return CBCGPVisualManager::GetToolbarButtonTextColor (pButton, state);
}
//************************************************************************************
void CBCGPWinXPVisualManager::OnHighlightMenuItem (CDC*pDC, CBCGPToolbarMenuButton* pButton,
											CRect rect, COLORREF& clrText)
{
	if (m_hThemeWindow == NULL || m_bOfficeStyleMenus)
	{
		CBCGPVisualManagerXP::OnHighlightMenuItem (pDC, pButton,	rect, clrText);
	}
	else
	{
		CBCGPVisualManager::OnHighlightMenuItem (pDC, pButton,	rect, clrText);
	}
}
//************************************************************************************
void CBCGPWinXPVisualManager::OnHighlightRarelyUsedMenuItems (CDC* pDC, CRect rectRarelyUsed)
{
	if (m_hThemeWindow == NULL || m_bOfficeStyleMenus)
	{
		CBCGPVisualManagerXP::OnHighlightRarelyUsedMenuItems  (pDC, rectRarelyUsed);
		return;
	}

	ASSERT_VALID (pDC);

	CBCGPDrawManager dm (*pDC);

	rectRarelyUsed.left --;
	rectRarelyUsed.right = rectRarelyUsed.left + CBCGPToolBar::GetMenuImageSize ().cx + 
		2 * GetMenuImageMargin () + 2;
	dm.HighlightRect (rectRarelyUsed, 94);
}
//************************************************************************************
void CBCGPWinXPVisualManager::OnDrawButtonBorder (CDC* pDC,
		CBCGPToolbarButton* pButton, CRect rect, BCGBUTTON_STATE state)
{
	if (m_hThemeToolBar == NULL)
	{
		CBCGPVisualManagerXP::OnDrawButtonBorder (pDC, pButton, rect, state);
		return;
	}

	if (m_bOfficeStyleMenus)
	{
		CBCGPToolbarMenuButton* pMenuButton = 
			DYNAMIC_DOWNCAST (CBCGPToolbarMenuButton, pButton);
		if (pMenuButton != NULL)
		{
			BOOL bIsMenuBar = pMenuButton->GetParentWnd () != NULL &&
				pMenuButton->GetParentWnd ()->IsKindOf (RUNTIME_CLASS (CBCGPMenuBar));

			BOOL bIsPopupMenu = pMenuButton->GetParentWnd () != NULL &&
				pMenuButton->GetParentWnd ()->IsKindOf (RUNTIME_CLASS (CBCGPPopupMenuBar));

			if (bIsPopupMenu || bIsMenuBar)
			{
				CBCGPVisualManagerXP::OnDrawButtonBorder (pDC, pButton, rect, state);
				return;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -