📄 bcgpvisualmanager.cpp
字号:
pDC->MoveTo (rectTab.right, bIsActive ? rectTab.bottom : rectTab.bottom - 1);
pDC->LineTo (rectTab.right, rectTab.top + iVertOffset);
pDC->LineTo (rectTab.right - iHorzOffset, rectTab.top);
pDC->SelectObject (&penLight);
pDC->LineTo (rectTab.left + iHorzOffset, rectTab.top);
pDC->LineTo (rectTab.left, rectTab.top + iVertOffset);
pDC->LineTo (rectTab.left, rectTab.bottom);
pDC->SelectObject (&penShadow);
pDC->MoveTo (rectTab.right - 1, bIsActive ? rectTab.bottom : rectTab.bottom - 1);
pDC->LineTo (rectTab.right - 1, rectTab.top + iVertOffset - 1);
}
}
if (bIsActive)
{
const int iBarHeight = 3;
const int y = (pTabWnd->GetLocation () == CBCGPBaseTabWnd::LOCATION_BOTTOM) ?
(rectTab.top - iBarHeight) : (rectTab.bottom);
CRect rectFill (CPoint (rectTab.left, y),
CSize (rectTab.Width () - 1, iBarHeight));
COLORREF clrActiveTab = pTabWnd->GetTabBkColor (iTab);
if (bIsOneNote && clrActiveTab != (COLORREF)-1)
{
CBrush br (clrActiveTab);
pDC->FillRect (rectFill, &br);
}
else
{
pDC->FillRect (rectFill, &globalData.brBarFace);
}
}
pDC->SelectObject (pOldPen);
if (bIsOneNote)
{
rectTab.left += rectTab.Height ();
rectTab.right -= CBCGPBaseTabWnd::TAB_IMAGE_MARGIN;
}
}
COLORREF clrText = pTabWnd->GetTabTextColor (iTab);
COLORREF cltTextOld = (COLORREF)-1;
if (!bIsActive && clrText != (COLORREF)-1)
{
cltTextOld = pDC->SetTextColor (clrText);
}
OnDrawTabContent (pDC, rectTab, iTab, bIsActive, pTabWnd, (COLORREF)-1);
if (cltTextOld != (COLORREF)-1)
{
pDC->SetTextColor (cltTextOld);
}
}
//*********************************************************************************
BOOL CBCGPVisualManager::OnEraseTabsFrame (CDC* pDC, CRect rect,
const CBCGPBaseTabWnd* pTabWnd)
{
ASSERT_VALID (pTabWnd);
ASSERT_VALID (pDC);
COLORREF clrActiveTab = pTabWnd->GetTabBkColor (pTabWnd->GetActiveTab ());
if (!pTabWnd->IsOneNoteStyle () || clrActiveTab == (COLORREF)-1)
{
return FALSE;
}
pDC->FillSolidRect (rect, clrActiveTab);
return TRUE;
}
//*********************************************************************************
void CBCGPVisualManager::OnDrawTabContent (CDC* pDC, CRect rectTab,
int iTab, BOOL bIsActive, const CBCGPBaseTabWnd* pTabWnd,
COLORREF clrText)
{
ASSERT_VALID (pTabWnd);
ASSERT_VALID (pDC);
CString strText;
pTabWnd->GetTabLabel (iTab, strText);
if (pTabWnd->IsFlatTab ())
{
//---------------
// Draw tab text:
//---------------
UINT nFormat = DT_SINGLELINE | DT_CENTER | DT_VCENTER;
if (pTabWnd->IsDrawNoPrefix ())
{
nFormat |= DT_NOPREFIX;
}
pDC->DrawText (strText, rectTab, nFormat);
}
else
{
CSize sizeImage = pTabWnd->GetImageSize ();
UINT uiIcon = pTabWnd->GetTabIcon (iTab);
HICON hIcon = pTabWnd->GetTabHicon (iTab);
if (uiIcon == (UINT)-1 && hIcon == NULL)
{
sizeImage.cx = 0;
}
if (sizeImage.cx + CBCGPBaseTabWnd::TAB_IMAGE_MARGIN <= rectTab.Width ())
{
if (hIcon != NULL)
{
//---------------------
// Draw the tab's icon:
//---------------------
CRect rectImage = rectTab;
if (bIsActive && pTabWnd->GetLocation () == CBCGPBaseTabWnd::LOCATION_BOTTOM)
rectImage.top += ((rectTab.Height () - sizeImage.cy) / 2) - 1;
else
rectImage.top += (rectTab.Height () - sizeImage.cy) / 2;
rectImage.bottom = rectImage.top + sizeImage.cy;
rectImage.left += IMAGE_MARGIN;
rectImage.right = rectImage.left + sizeImage.cx;
pDC->DrawState (rectImage.TopLeft (), rectImage.Size (),
hIcon, DSS_NORMAL, (HBRUSH) NULL);
}
else
{
const CImageList* pImageList = pTabWnd->GetImageList ();
if (pImageList != NULL && uiIcon != (UINT)-1)
{
//----------------------
// Draw the tab's image:
//----------------------
CRect rectImage = rectTab;
if (bIsActive && pTabWnd->GetLocation () == CBCGPBaseTabWnd::LOCATION_BOTTOM)
rectImage.top += ((rectTab.Height () - sizeImage.cy) / 2) - 1;
else
rectImage.top += (rectTab.Height () - sizeImage.cy) / 2;
rectImage.bottom = rectImage.top + sizeImage.cy;
rectImage.left += IMAGE_MARGIN;
rectImage.right = rectImage.left + sizeImage.cx;
ASSERT_VALID (pImageList);
((CImageList*) pImageList)->Draw (pDC, uiIcon, rectImage.TopLeft (), ILD_TRANSPARENT);
}
}
//------------------------------
// Finally, draw the tab's text:
//------------------------------
CRect rcText = rectTab;
rcText.left += sizeImage.cx + 2 * TEXT_MARGIN;
if (clrText != (COLORREF)-1)
{
pDC->SetTextColor (clrText);
}
CString strText;
pTabWnd->GetTabLabel (iTab, strText);
UINT nFormat = DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS;
if (pTabWnd->IsDrawNoPrefix ())
{
nFormat |= DT_NOPREFIX;
}
if (pTabWnd->IsOneNoteStyle ())
{
nFormat |= DT_CENTER;
}
else
{
nFormat |= DT_LEFT;
}
pDC->DrawText (strText, rcText, nFormat);
}
}
}
//**********************************************************************************
void CBCGPVisualManager::OnEraseTabsButton (CDC* pDC, CRect rect,
CBCGPButton* /*pButton*/,
CBCGPBaseTabWnd* /*pWndTab*/)
{
ASSERT_VALID (pDC);
pDC->FillRect (rect, &globalData.brBarFace);
}
//**********************************************************************************
void CBCGPVisualManager::OnDrawTabsButtonBorder (CDC* pDC, CRect& rect,
CBCGPButton* pButton, UINT uiState,
CBCGPBaseTabWnd* /*pWndTab*/)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pButton);
if (pButton->IsPressed () || (uiState & ODS_SELECTED))
{
pDC->Draw3dRect (rect, globalData.clrBarDkShadow, globalData.clrBarHilite);
rect.left += 2;
rect.top += 2;
}
else
{
pDC->Draw3dRect (rect, globalData.clrBarHilite, globalData.clrBarDkShadow);
}
rect.DeflateRect (2, 2);
}
//**********************************************************************************
COLORREF CBCGPVisualManager::OnFillCommandsListBackground (CDC* pDC, CRect rect, BOOL bIsSelected)
{
ASSERT_VALID (this);
ASSERT_VALID (pDC);
if (bIsSelected)
{
pDC->FillRect (rect, &globalData.brHilite);
const int nFrameSize = 1;
rect.DeflateRect (1, 1);
rect.right--;
rect.bottom--;
pDC->PatBlt (rect.left, rect.top + nFrameSize, nFrameSize, rect.Height (), PATINVERT);
pDC->PatBlt (rect.left, rect.top, rect.Width (), nFrameSize, PATINVERT);
pDC->PatBlt (rect.right, rect.top, nFrameSize, rect.Height (), PATINVERT);
pDC->PatBlt (rect.left + nFrameSize, rect.bottom, rect.Width (), nFrameSize, PATINVERT);
return globalData.clrTextHilite;
}
pDC->FillRect (rect, &globalData.brBarFace);
return globalData.clrBarText;
}
//**********************************************************************************
void CBCGPVisualManager::OnDrawMenuArrowOnCustomizeList (CDC* pDC,
CRect rectCommand, BOOL bSelected)
{
CRect rectTriangle = rectCommand;
rectTriangle.left = rectTriangle.right - CMenuImages::Size ().cx;
CPoint pointTriangle (
rectTriangle.left + (rectTriangle.Width () - CMenuImages::Size ().cx) / 2,
rectTriangle.top + (rectTriangle.Height () - CMenuImages::Size ().cy) / 2);
CMenuImages::Draw (pDC, CMenuImages::IdArowRightLarge, pointTriangle,
bSelected ? CMenuImages::ImageWhite : CMenuImages::ImageBlack);
CRect rectLine = rectCommand;
rectLine.right = rectTriangle.left - 1;
rectLine.left = rectLine.right - 2;
rectLine.DeflateRect (0, 2);
pDC->Draw3dRect (&rectLine, globalData.clrBtnShadow, globalData.clrBtnHilite);
}
//*********************************************************************************
CBCGPVisualManager* CBCGPVisualManager::CreateVisualManager (
CRuntimeClass* pVisualManager)
{
if (pVisualManager == NULL)
{
ASSERT (FALSE);
return NULL;
}
CBCGPVisualManager* pVisManagerOld = m_pVisManager;
CObject* pObj = pVisualManager->CreateObject ();
if (pObj == NULL)
{
ASSERT (FALSE);
return NULL;
}
ASSERT_VALID (pObj);
if (pVisManagerOld != NULL)
{
ASSERT_VALID (pVisManagerOld);
delete pVisManagerOld;
}
m_pVisManager = (CBCGPVisualManager*) pObj;
m_pVisManager->m_bAutoDestroy = TRUE;
return m_pVisManager;
}
//*************************************************************************************
void CBCGPVisualManager::DestroyInstance ()
{
if (m_pVisManager != NULL)
{
delete m_pVisManager;
}
m_pVisManager = NULL;
}
//***********************************************************************************
void CBCGPVisualManager::OnDrawTearOffCaption (CDC* pDC, CRect rect, BOOL bIsActive)
{
const int iBorderSize = 2;
ASSERT_VALID (pDC);
pDC->FillRect (rect, &globalData.brBarFace);
rect.DeflateRect (iBorderSize, 1);
pDC->FillSolidRect (rect,
bIsActive ?
globalData.clrActiveCaption :
globalData.clrInactiveCaption);
}
//***********************************************************************************
void CBCGPVisualManager::OnDrawMenuSystemButton (CDC* pDC, CRect rect,
UINT uiSystemCommand,
UINT nStyle, BOOL /*bHighlight*/)
{
ASSERT_VALID (pDC);
UINT uiState = 0;
switch (uiSystemCommand)
{
case SC_CLOSE:
uiState |= DFCS_CAPTIONCLOSE;
break;
case SC_MINIMIZE:
uiState |= DFCS_CAPTIONMIN;
break;
case SC_RESTORE:
uiState |= DFCS_CAPTIONRESTORE;
break;
default:
return;
}
if (nStyle & TBBS_PRESSED)
{
uiState |= DFCS_PUSHED;
}
if (nStyle & TBBS_DISABLED) // Jan Vasina: Add support for disabled buttons
{
uiState |= DFCS_INACTIVE;
}
pDC->DrawFrameControl (rect, DFC_CAPTION, uiState);
}
//**************************************************************************************
void CBCGPVisualManager::OnDrawComboDropButton (CDC* pDC, CRect rect,
BOOL bDisabled,
BOOL bIsDropped,
BOOL bIsHighlighted,
CBCGPToolbarComboBoxButton* /*pButton*/)
{
ASSERT_VALID(pDC);
ASSERT_VALID (this);
pDC->FillSolidRect (rect, globalData.clrBarFace);
pDC->Draw3dRect (rect, globalData.clrBarHilite, globalData.clrBarHilite);
CPoint pointTriangle (
rect.left + (rect.Width () - CMenuImages::Size ().cx) / 2 + 1,
rect.top + (rect.Height () - CMenuImages::Size ().cy) / 2 + 1);
if (bIsDropped)
{
rect.OffsetRect (1, 1);
pointTriangle.Offset (1, 1);
pDC->Draw3dRect (&rect, globalData.clrBarShadow, globalData.clrBarHilite);
}
else if (bIsHighlighted)
{
pDC->Draw3dRect (&rect, globalData.clrBarHilite, globalData.clrBarShadow);
}
CMenuImages::Draw (pDC, CMenuImages::IdArowDown, pointTriangle,
bDisabled ? CMenuImages::ImageGray : CMenuImages::ImageBlack);
}
//*************************************************************************************
void CBCGPVisualManager::OnDrawComboBorder (CDC* pDC, CRect rect,
BOOL /*bDisabled*/,
BOOL bIsDropped,
BOOL bIsHighlighted,
CBCGPToolbarComboBoxButton* /*pButton*/)
{
ASSERT_VALID (pDC);
if (bIsHighlighted || bIsDropped)
{
if (m_bMenuFlatLook)
{
CRect rectBorder = rect;
rectBorder.DeflateRect (1, 1);
pDC->Draw3dRect (&rectBorder, globalData.clrBarDkShadow, globalData.clrBarDkShadow);
}
else
{
pDC->Draw3dRect (&rect, globalData.clrBarShadow, globalData.clrBarHilite);
}
}
}
//********************************************************************************
void CBCGPVisualManager::OnDrawStatusBarPaneBorder (CDC* pDC, CBCGPStatusBar* /*pBar*/,
CRect rectPane, UINT /*uiID*/, UINT nStyle)
{
ASSERT_VALID(pDC);
ASSERT_VALID (this);
if (!(nStyle & SBPS_NOBORDERS))
{
// draw the borders
COLORREF clrHilite;
COLORREF clrShadow;
if (nStyle & SBPS_POPOUT)
{
// reverse colors
clrHilite = globalData.clrBarShadow;
clrShadow = globalData.clrBarHilite;
}
else
{
// normal colors
clrHilite = globalData.clrBarHilite;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -