📄 bcgpvisualmanager.cpp
字号:
CPen* pPenOld = (CPen*) pDC->SelectObject (&pen);
pDC->MoveTo (rect.left, rect.top);
pDC->LineTo (rect.left, rect.bottom-1);
pDC->LineTo (rect.right-1, rect.bottom-1);
pDC->LineTo (rect.right-1, rect.top);
if (bNoTitle)
{
pDC->LineTo (rect.left, rect.top);
}
else
{
pDC->LineTo (rect.right-1, rect.top-1);
}
pDC->SelectObject (&pPenOld);
}
//**********************************************************************************
void CBCGPVisualManager::OnDrawTask(CDC* pDC, CBCGPTask* pTask, CImageList* pIcons,
BOOL bIsHighlighted, BOOL /*bIsSelected*/)
{
ASSERT_VALID(pDC);
ASSERT_VALID(pIcons);
ASSERT(pTask != NULL);
CRect rectText = pTask->m_rect;
if (pTask->m_bIsSeparator)
{
CPen pen (PS_SOLID, 1, globalData.clrBarFace);
CPen* pPenOld = (CPen*) pDC->SelectObject (&pen);
pDC->MoveTo (rectText.left, rectText.CenterPoint ().y);
pDC->LineTo (rectText.right, rectText.CenterPoint ().y);
pDC->SelectObject (&pPenOld);
return;
}
// ---------
// Draw icon
// ---------
CSize sizeIcon(0, 0);
::ImageList_GetIconSize (pIcons->m_hImageList, (int*) &sizeIcon.cx, (int*) &sizeIcon.cy);
if (pTask->m_nIcon >= 0 && sizeIcon.cx > 0)
{
pIcons->Draw (pDC, pTask->m_nIcon, rectText.TopLeft (), ILD_TRANSPARENT);
}
int nTaskPaneOffset = pTask->m_pGroup->m_pPage->m_pTaskPane->GetGroupCaptionHorzOffset();
rectText.left += sizeIcon.cx + (nTaskPaneOffset != -1 ? nTaskPaneOffset : m_nTasksIconHorzOffset);
// ---------
// Draw text
// ---------
BOOL bIsLabel = (pTask->m_uiCommandID == 0);
CFont* pFontOld = NULL;
COLORREF clrTextOld = pDC->GetTextColor ();
if (bIsLabel)
{
pFontOld = pDC->SelectObject (&globalData.fontRegular);
pDC->SetTextColor (globalData.clrWindowText);
}
else if (!pTask->m_bEnabled)
{
pDC->SetTextColor (globalData.clrGrayedText);
pFontOld = pDC->SelectObject (&globalData.fontRegular);
}
else if (bIsHighlighted)
{
pFontOld = pDC->SelectObject (&globalData.fontUnderline);
pDC->SetTextColor (globalData.clrWindowText);
}
else
{
pFontOld = pDC->SelectObject (&globalData.fontRegular);
pDC->SetTextColor (globalData.clrWindowText);
}
int nBkModeOld = pDC->SetBkMode(TRANSPARENT);
pDC->DrawText (pTask->m_strName, rectText, DT_SINGLELINE | DT_VCENTER);
pDC->SetBkMode(nBkModeOld);
pDC->SelectObject (pFontOld);
pDC->SetTextColor (clrTextOld);
}
//**********************************************************************************
void CBCGPVisualManager::OnDrawScrollButtons(CDC* pDC, const CRect& rect, const int nBorderSize,
int iImage, BOOL bHilited)
{
ASSERT_VALID (pDC);
CRect rectImage (CPoint (0, 0), CMenuImages::Size ());
CRect rectFill = rect;
rectFill.top -= nBorderSize;
pDC->FillRect (rectFill, &globalData.brBarFace);
if (bHilited)
{
CBCGPDrawManager dm (*pDC);
dm.HighlightRect (rect);
pDC->Draw3dRect (rect,
globalData.clrBarHilite,
globalData.clrBarDkShadow);
}
CPoint point (
rect.left + (rect.Width () - rectImage.Width ()) / 2,
rect.top + (rect.Height () - rectImage.Height ()) / 2);
CMenuImages::Draw (pDC, (CMenuImages::IMAGES_IDS) iImage, point);
}
//**********************************************************************************
void CBCGPVisualManager::OnDrawSlider (CDC* pDC, CBCGPSlider* pSlider, CRect rect, BOOL bAutoHideMode)
{
ASSERT_VALID (pDC);
ASSERT_VALID (pSlider);
pDC->FillRect (rect, &globalData.brBarFace);
if (bAutoHideMode)
{
// draw outer edge;
DWORD dwAlgn = pSlider->GetCurrentAlignment ();
CRect rectBorder = rect;
COLORREF clrBorder = globalData.clrBarDkShadow;
if (dwAlgn & CBRS_ALIGN_LEFT)
{
rectBorder.left = rectBorder.right;
}
else if (dwAlgn & CBRS_ALIGN_RIGHT)
{
rectBorder.right = rectBorder.left;
clrBorder = globalData.clrBarHilite;
}
else if (dwAlgn & CBRS_ALIGN_TOP)
{
rectBorder.top = rectBorder.bottom;
}
else if (dwAlgn & CBRS_ALIGN_BOTTOM)
{
rectBorder.bottom = rectBorder.top;
clrBorder = globalData.clrBarHilite;
}
else
{
ASSERT(FALSE);
return;
}
pDC->Draw3dRect (rectBorder, clrBorder, clrBorder);
}
}
//********************************************************************************
void CBCGPVisualManager::OnDrawSplitterBorder (CDC* pDC, CBCGPSplitterWnd* pSplitterWnd, CRect rect)
{
ASSERT_VALID(pDC);
pDC->Draw3dRect (rect, globalData.clrBarShadow, globalData.clrBarHilite);
rect.InflateRect(-CX_BORDER, -CY_BORDER);
pDC->Draw3dRect (rect, globalData.clrBarFace, globalData.clrBarFace);
}
//********************************************************************************
void CBCGPVisualManager::OnDrawSplitterBox (CDC* pDC, CBCGPSplitterWnd* pSplitterWnd, CRect& rect)
{
ASSERT_VALID(pDC);
pDC->Draw3dRect(rect, globalData.clrBarFace, globalData.clrBarShadow);
}
//********************************************************************************
void CBCGPVisualManager::OnFillSplitterBackground (CDC* pDC, CBCGPSplitterWnd* pSplitterWnd, CRect rect)
{
ASSERT_VALID(pDC);
pDC->FillSolidRect (rect, globalData.clrBarFace);
}
//**********************************************************************************
void CBCGPVisualManager::OnDrawCheckBox (CDC *pDC, CRect rect,
BOOL bHighlighted,
BOOL bChecked,
BOOL bEnabled)
{
if (bHighlighted)
{
pDC->DrawFocusRect (rect);
}
rect.DeflateRect (1, 1);
pDC->FillSolidRect (&rect, bEnabled ? globalData.clrWindow :
globalData.clrBarFace);
pDC->Draw3dRect (&rect,
globalData.clrBarDkShadow,
globalData.clrBarHilite);
rect.DeflateRect (1, 1);
pDC->Draw3dRect (&rect,
globalData.clrBarShadow,
globalData.clrBarLight);
if (bChecked)
{
CSize sizeImage = CMenuImages::Size ();
CPoint ptImage (rect.left + (rect.Width () - sizeImage.cx) / 2,
rect.top + (rect.Height () - sizeImage.cy) / 2);
CMenuImages::Draw (pDC, CMenuImages::IdCheck, ptImage,
CMenuImages::ImageBlack);
}
}
//**********************************************************************************
void CBCGPVisualManager::OnDrawSpinButtons(CDC *pDC, const CRect &rectSpin, int iState, BOOL bOrientation)
{
ASSERT_VALID(pDC);
ASSERT_VALID (this);
CRect rect[2];
rect[0] = rect[1] = rectSpin;
if(!bOrientation)
{
rect[0].DeflateRect(0, 0, 0, rect[0].Height() / 2);
rect[1].top = rect[0].bottom + 1;
}
else
{
rect[0].DeflateRect(0, 0, rect[0].Width() / 2, 0);
rect[1].left = rect[0].right + 1;
}
pDC->FillSolidRect (rectSpin, globalData.clrBarFace);
pDC->Draw3dRect (rectSpin, globalData.clrBarHilite, globalData.clrBarHilite);
CMenuImages::IMAGES_IDS id[2][2] = {{CMenuImages::IdArowUp, CMenuImages::IdArowDown}, {CMenuImages::IdArowLeft, CMenuImages::IdArowRight}};
int idxPressed = (iState & (SPIN_PRESSEDUP | SPIN_PRESSEDDOWN)) - 1;
BOOL bDisabled = iState & SPIN_DISABLED;
for(int i = 0; i < 2; i ++)
{
CPoint pointTriangle (
rect[i].left + (rect[i].Width () - CMenuImages::Size ().cx) / 2 ,
rect[i].top + (rect[i].Height () - CMenuImages::Size ().cy) / 2 );
if (idxPressed == i)
{
pDC->Draw3dRect (&rect[i], globalData.clrBarShadow, globalData.clrBarHilite);
}
else
{
pDC->Draw3dRect (&rect[i], globalData.clrBarHilite, globalData.clrBarShadow);
}
CMenuImages::Draw (pDC, id[bOrientation][i], pointTriangle,
bDisabled ? CMenuImages::ImageGray : CMenuImages::ImageBlack);
}
}
//**************************************************************************************
void CBCGPVisualManager::OnDrawExpandingBox (CDC* pDC, CRect rect, BOOL bIsOpened,
COLORREF colorBox)
{
ASSERT_VALID(pDC);
pDC->Draw3dRect (rect, colorBox, colorBox);
rect.DeflateRect (2, 2);
CPen penLine (PS_SOLID, 1, globalData.clrBarText);
CPen* pOldPen = pDC->SelectObject (&penLine);
CPoint ptCenter = rect.CenterPoint ();
pDC->MoveTo (rect.left, ptCenter.y);
pDC->LineTo (rect.right, ptCenter.y);
if (!bIsOpened)
{
pDC->MoveTo (ptCenter.x, rect.top);
pDC->LineTo (ptCenter.x, rect.bottom);
}
pDC->SelectObject (pOldPen);
}
//***********************************************************************************
COLORREF CBCGPVisualManager::OnFillCalendarBarNavigationRow (CDC* pDC, CRect rect)
{
ASSERT_VALID (pDC);
CBrush br (globalData.clrInactiveCaption);
pDC->FillRect (rect, &br);
pDC->Draw3dRect (rect, globalData.clrInactiveBorder, globalData.clrInactiveBorder);
return globalData.clrInactiveCaptionText;
}
//*************************************************************************************
void CBCGPVisualManager::OnFillCalendarBarWeekColumn (CDC* pDC, CRect rect,
COLORREF& clrText, COLORREF& clrTextDisabled)
{
ASSERT_VALID (pDC);
pDC->FillSolidRect (rect, globalData.clrBarShadow);
clrText = globalData.clrBarHilite;
clrTextDisabled = globalData.clrBarLight;
}
//*************************************************************************************
void CBCGPVisualManager::OnDrawControlBorder (CWnd* pWndCtrl)
{
ASSERT_VALID (pWndCtrl);
CWindowDC dc (pWndCtrl);
CRect rect;
pWndCtrl->GetWindowRect (rect);
rect.bottom -= rect.top;
rect.right -= rect.left;
rect.left = rect.top = 0;
dc.Draw3dRect (rect, globalData.clrBarDkShadow, globalData.clrBarHilite);
}
//***********************************************************************************
void CBCGPVisualManager::OnDrawShowAllMenuItems (CDC* pDC, CRect rect,
CBCGPVisualManager::BCGBUTTON_STATE /*state*/)
{
ASSERT_VALID (pDC);
CPoint pointImage (
rect.left + (rect.Width () - CMenuImages::Size ().cx) / 2,
rect.top + (rect.Height () - CMenuImages::Size ().cy) / 2);
CMenuImages::Draw (pDC, CMenuImages::IdArowShowAll, pointImage);
}
//************************************************************************************
int CBCGPVisualManager::GetShowAllMenuItemsHeight (CDC* /*pDC*/, const CSize& /*sizeDefault*/)
{
return CMenuImages::Size ().cy + 2 * TEXT_MARGIN;
}
//**********************************************************************************
void CBCGPVisualManager::GetTabFrameColors (const CBCGPBaseTabWnd* pTabWnd,
COLORREF& clrDark,
COLORREF& clrBlack,
COLORREF& clrHighlight,
COLORREF& clrFace,
COLORREF& clrDarkShadow,
COLORREF& clrLight,
CBrush*& pbrFace,
CBrush*& pbrBlack)
{
ASSERT_VALID (pTabWnd);
COLORREF clrActiveTab = pTabWnd->GetTabBkColor (pTabWnd->GetActiveTab ());
if (pTabWnd->IsOneNoteStyle () && clrActiveTab != (COLORREF)-1)
{
clrFace = clrActiveTab;
}
else
{
clrFace = globalData.clrBarFace;
}
clrDark = globalData.clrBarShadow;
clrBlack = globalData.clrBarText;
clrHighlight = globalData.clrBarHilite;
clrDarkShadow = globalData.clrBarDkShadow;
clrLight = globalData.clrBarLight;
pbrFace = &globalData.brBarFace;
pbrBlack = &globalData.brBlack;
}
//*********************************************************************************
void CBCGPVisualManager::OnFillAutoHideButtonBackground (CDC* pDC, CRect rect, CBCGPAutoHideButton* /*pButton*/)
{
ASSERT_VALID (pDC);
pDC->FillRect (rect, &globalData.brBarFace);
}
//*********************************************************************************
void CBCGPVisualManager::OnDrawAutoHideButtonBorder (CDC* pDC, CRect rectBounds, CRect rectBorderSize, CBCGPAutoHideButton* /*pButton*/)
{
ASSERT_VALID (pDC);
COLORREF clr = globalData.clrBarShadow;
COLORREF clrText = pDC->GetTextColor ();
if (rectBorderSize.left > 0)
{
pDC->FillSolidRect (rectBounds.left, rectBounds.top,
rectBounds.left + rectBorderSize.left,
rectBounds.bottom, clr);
}
if (rectBorderSize.top > 0)
{
pDC->FillSolidRect (rectBounds.left, rectBounds.top,
rectBounds.right,
rectBounds.top + rectBorderSize.top, clr);
}
if (rectBorderSize.right > 0)
{
pDC->FillSolidRect (rectBounds.right - rectBorderSize.right, rectBounds.top,
rectBounds.right,
rectBounds.bottom, clr);
}
if (rectBorderSize.bottom > 0)
{
pDC->FillSolidRect (rectBounds.left, rectBounds.bottom - rectBorderSize.bottom,
rectBounds.right,
rectBounds.bottom, clr);
}
pDC->SetTextColor (clrText);
}
/////////////////////////////////////////////////////////////////////////////////////
// CBCGPWinXPThemeManager
CBCGPWinXPThemeManager::CBCGPWinXPThemeManager ()
{
m_hThemeToolBar = NULL;
m_hThemeButton = NULL;
m_hThemeStatusBar = NULL;
m_hThemeWindow = NULL;
m_hThemeRebar = NULL;
m_hThemeComboBox = NULL;
m_hThemeProgress = NULL;
m_hThemeHeader = NULL;
m_hThemeScrollBar = NULL;
m_hThemeExplorerBar = NULL;
m_hThemeTree = NULL;
m_hThemeStartPanel = NULL;
m_hThemeTaskBand = NULL;
m_hThemeTaskBar = NULL;
m_hinstUXDLL = LoadLibrary (_T("UxTheme.dll"));
if (m_hinstUXDLL != NULL)
{
m_pfOpenThemeData = (OPENTHEMEDATA)::GetProcAddress (m_hinstUXDLL, "OpenThemeData");
m_pfCloseThemeData = (CLOSETHEMEDATA)::GetProcAddress (m_hinstUXDLL, "CloseThemeData");
m_pfDrawThemeBackground = (DRAWTHEMEBACKGROUND)::GetProcAdd
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -