📄 bcgpwinxpvisualmanager.cpp
字号:
return;
}
/* TODO
int nState = bIsUp ? HSAS_SORTEDUP : HSAS_SORTEDDOWN;
(*m_pfDrawThemeBackground) (m_hThemeHeader, pDC->GetSafeHdc(),
HP_HEADERSORTARROW, nState, &rect, 0);
*/
#define POINTS_NUM 3
POINT pts [POINTS_NUM];
if (bIsUp)
{
pts [0].x = rect.left;
pts [0].y = rect.bottom;
pts [1].x = rect.CenterPoint ().x;
pts [1].y = rect.top;
pts [2].x = rect.right;
pts [2].y = rect.bottom;
}
else
{
pts [0].x = rect.left;
pts [0].y = rect.top;
pts [1].x = rect.CenterPoint ().x;
pts [1].y = rect.bottom;
pts [2].x = rect.right;
pts [2].y = rect.top;
}
CBrush br (globalData.clrBtnShadow);
CBrush* pOldBrush = pDC->SelectObject (&br);
CPen* pOldPen = (CPen*) pDC->SelectStockObject (NULL_PEN);
pDC->Polygon (pts, POINTS_NUM);
pDC->SelectObject (pOldBrush);
pDC->SelectObject (pOldPen);
}
//*************************************************************************************
void CBCGPWinXPVisualManager::OnDrawEditBorder (CDC* pDC, CRect rect,
BOOL bDisabled,
BOOL bIsHighlighted,
CBCGPToolbarEditBoxButton* pButton)
{
if (m_hThemeWindow == NULL)
{
CBCGPVisualManagerXP::OnDrawEditBorder (pDC, rect, bDisabled, bIsHighlighted, pButton);
return;
}
if (bIsHighlighted)
{
pDC->Draw3dRect (&rect, globalData.clrBtnHilite, globalData.clrBtnHilite);
}
}
//**********************************************************************************
void CBCGPWinXPVisualManager::OnFillTasksPaneBackground(CDC* pDC, CRect rectWorkArea)
{
ASSERT_VALID (pDC);
if (m_hThemeExplorerBar == NULL)
{
CBCGPVisualManagerXP::OnFillTasksPaneBackground (pDC, rectWorkArea);
return;
}
(*m_pfDrawThemeBackground) (m_hThemeExplorerBar, pDC->GetSafeHdc(), EBP_HEADERBACKGROUND,
0, &rectWorkArea, 0);
}
//**********************************************************************************
void CBCGPWinXPVisualManager::OnDrawTasksGroupCaption(CDC* pDC, CBCGPTasksGroup* pGroup,
BOOL bIsHighlighted, BOOL bIsSelected, BOOL bCanCollapse)
{
ASSERT_VALID(pDC);
ASSERT(pGroup != NULL);
if (m_hThemeExplorerBar == NULL)
{
CBCGPVisualManagerXP::OnDrawTasksGroupCaption (pDC, pGroup, bIsHighlighted, bIsSelected);
return;
}
if (pGroup->m_strName.IsEmpty())
{
return;
}
// -------------------------------
// Draw group caption (Windows XP)
// -------------------------------
if (pGroup->m_bIsSpecial)
{
(*m_pfDrawThemeBackground) (m_hThemeExplorerBar, pDC->GetSafeHdc(), EBP_SPECIALGROUPHEAD,
0, &pGroup->m_rect, 0);
}
else
{
(*m_pfDrawThemeBackground) (m_hThemeExplorerBar, pDC->GetSafeHdc(), EBP_NORMALGROUPHEAD,
0, &pGroup->m_rect, 0);
}
// ---------------------------
// Draw an icon if it presents
// ---------------------------
BOOL bShowIcon = (pGroup->m_hIcon != NULL
&& pGroup->m_sizeIcon.cx < pGroup->m_rect.Width () - pGroup->m_rect.Height());
if (bShowIcon)
{
CPoint pointIcon(pGroup->m_rect.left+1, pGroup->m_rect.bottom - pGroup->m_sizeIcon.cy);
pDC->DrawIcon(pointIcon, pGroup->m_hIcon);
}
// -----------------------
// Draw group caption text
// -----------------------
CFont* pFontOld = pDC->SelectObject (&globalData.fontBold);
COLORREF clrTextOld = pDC->GetTextColor();
if (bCanCollapse && bIsHighlighted)
{
if (pGroup->m_bIsSpecial)
{
pDC->SetTextColor (globalData.clrWindow);
}
else
{
pDC->SetTextColor (globalData.clrHilite);
}
}
else
{
if (pGroup->m_bIsSpecial)
{
pDC->SetTextColor (globalData.clrWindow);
}
else
{
pDC->SetTextColor (globalData.clrHilite);
}
}
int nBkModeOld = pDC->SetBkMode(TRANSPARENT);
int nTaskPaneHOffset = pGroup->m_pPage->m_pTaskPane->GetGroupCaptionHorzOffset();
int nTaskPaneVOffset = pGroup->m_pPage->m_pTaskPane->GetGroupCaptionVertOffset();
CRect rectText = pGroup->m_rect;
rectText.left += (bShowIcon ? pGroup->m_sizeIcon.cx :
(nTaskPaneHOffset != -1 ? nTaskPaneHOffset : m_nGroupCaptionHorzOffset));
rectText.top += (nTaskPaneVOffset != -1 ? nTaskPaneVOffset : m_nGroupCaptionVertOffset);
rectText.right = max(rectText.left, rectText.right - pGroup->m_rect.Height());
pDC->DrawText (pGroup->m_strName, rectText, DT_SINGLELINE);
pDC->SetBkMode(nBkModeOld);
pDC->SelectObject (pFontOld);
pDC->SetTextColor (clrTextOld);
// -------------------------
// Draw group caption button
// -------------------------
if (bCanCollapse)
{
CRect rectButton = pGroup->m_rect;
rectButton.left = max(rectButton.left, rectButton.right - rectButton.Height());
if (pGroup->m_bIsSpecial)
{
if (!pGroup->m_bIsCollapsed)
{
if (bIsHighlighted)
{
(*m_pfDrawThemeBackground) (m_hThemeExplorerBar, pDC->GetSafeHdc(),
EBP_SPECIALGROUPCOLLAPSE, EBSGC_HOT, &rectButton, 0);
}
else
{
(*m_pfDrawThemeBackground) (m_hThemeExplorerBar, pDC->GetSafeHdc(),
EBP_SPECIALGROUPCOLLAPSE, EBSGC_NORMAL, &rectButton, 0);
}
}
else
{
if (bIsHighlighted)
{
(*m_pfDrawThemeBackground) (m_hThemeExplorerBar, pDC->GetSafeHdc(),
EBP_SPECIALGROUPEXPAND, EBSGE_HOT, &rectButton, 0);
}
else
{
(*m_pfDrawThemeBackground) (m_hThemeExplorerBar, pDC->GetSafeHdc(),
EBP_SPECIALGROUPEXPAND, EBSGE_NORMAL, &rectButton, 0);
}
}
}
else
{
if (!pGroup->m_bIsCollapsed)
{
if (bIsHighlighted)
{
(*m_pfDrawThemeBackground) (m_hThemeExplorerBar, pDC->GetSafeHdc(),
EBP_NORMALGROUPCOLLAPSE, EBNGC_HOT, &rectButton, 0);
}
else
{
(*m_pfDrawThemeBackground) (m_hThemeExplorerBar, pDC->GetSafeHdc(),
EBP_NORMALGROUPCOLLAPSE, EBNGC_NORMAL, &rectButton, 0);
}
}
else
{
if (bIsHighlighted)
{
(*m_pfDrawThemeBackground) (m_hThemeExplorerBar, pDC->GetSafeHdc(),
EBP_NORMALGROUPEXPAND, EBNGE_HOT, &rectButton, 0);
}
else
{
(*m_pfDrawThemeBackground) (m_hThemeExplorerBar, pDC->GetSafeHdc(),
EBP_NORMALGROUPEXPAND, EBNGE_NORMAL, &rectButton, 0);
}
}
}
}
}
//**********************************************************************************
void CBCGPWinXPVisualManager::OnFillTasksGroupInterior(CDC* pDC, CRect rect, BOOL bSpecial)
{
ASSERT_VALID(pDC);
if (m_hThemeExplorerBar == NULL)
{
CBCGPVisualManagerXP::OnFillTasksGroupInterior (pDC, rect);
return;
}
if (!bSpecial)
{
(*m_pfDrawThemeBackground) (m_hThemeExplorerBar, pDC->GetSafeHdc(),
EBP_NORMALGROUPBACKGROUND, 0, &rect, 0);
}
else
{
(*m_pfDrawThemeBackground) (m_hThemeExplorerBar, pDC->GetSafeHdc(),
EBP_SPECIALGROUPBACKGROUND, 0, &rect, 0);
}
}
//**********************************************************************************
void CBCGPWinXPVisualManager::OnDrawTasksGroupAreaBorder(CDC* pDC, CRect rect, BOOL bSpecial,
BOOL bNoTitle)
{
if (m_hThemeExplorerBar == NULL)
{
CBCGPVisualManagerXP::OnDrawTasksGroupAreaBorder(pDC, rect, bSpecial, bNoTitle);
return;
}
ASSERT_VALID(pDC);
// Draw underline
if (bNoTitle)
{
CRect rectDraw = rect;
rectDraw.bottom = rectDraw.top + 1;
if (bSpecial)
{
(*m_pfDrawThemeBackground) (m_hThemeExplorerBar, pDC->GetSafeHdc(), EBP_SPECIALGROUPHEAD,
0, &rectDraw, 0);
}
else
{
(*m_pfDrawThemeBackground) (m_hThemeExplorerBar, pDC->GetSafeHdc(), EBP_NORMALGROUPHEAD,
0, &rectDraw, 0);
}
}
return;
}
//**********************************************************************************
void CBCGPWinXPVisualManager::OnDrawTask(CDC* pDC, CBCGPTask* pTask, CImageList* pIcons,
BOOL bIsHighlighted, BOOL /*bIsSelected*/)
{
ASSERT_VALID(pDC);
ASSERT_VALID(pIcons);
ASSERT(pTask != NULL);
// ---------
// Draw icon
// ---------
CRect rectText = pTask->m_rect;
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.clrHilite);
}
else
{
pFontOld = pDC->SelectObject (&globalData.fontRegular);
pDC->SetTextColor (globalData.clrHilite);
}
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 CBCGPWinXPVisualManager::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 CBCGPWinXPVisualManager::OnDrawExpandingBox (CDC* pDC, CRect rect, BOOL bIsOpened, COLORREF colorBox)
{
ASSERT_VALID(pDC);
if (m_hThemeTree == NULL)
{
CBCGPVisualManagerXP::OnDrawExpandingBox (pDC, rect, bIsOpened, colorBox);
return;
}
(*m_pfDrawThemeBackground) (m_hThemeTree, pDC->GetSafeHdc(), TVP_GLYPH,
bIsOpened ? GLPS_OPENED : GLPS_CLOSED, &rect, 0);
}
//***********************************************************************************
COLORREF CBCGPWinXPVisualManager::OnFillCalendarBarNavigationRow (CDC* pDC, CRect rect)
{
if (m_hThemeHeader == NULL)
{
return CBCGPVisualManagerXP::OnFillCalendarBarNavigationRow (pDC, rect);
}
ASSERT_VALID (pDC);
(*m_pfDrawThemeBackground) (m_hThemeHeader, pDC->GetSafeHdc(), HP_HEADERITEM,
HIS_NORMAL, &rect, 0);
return globalData.clrBtnText;
}
//**********************************************************************************
void CBCGPWinXPVisualManager::OnDrawCheckBox (CDC *pDC, CRect rect,
BOOL bHighlighted,
BOOL bChecked,
BOOL bEnabled)
{
if (m_hThemeButton == NULL)
{
CBCGPVisualManagerXP::OnDrawCheckBox (pDC, rect, bHighlighted, bChecked, bEnabled);
return;
}
ASSERT_VALID (pDC);
int nState = bChecked ? CBS_CHECKEDNORMAL : CBS_UNCHECKEDNORMAL;
if (!bEnabled)
{
nState = bChecked ? CBS_CHECKEDDISABLED : CBS_UNCHECKEDDISABLED;
}
else if (bHighlighted)
{
nState = bChecked ? CBS_CHECKEDHOT : CBS_UNCHECKEDHOT;
}
(*m_pfDrawThemeBackground) (m_hThemeButton, pDC->GetSafeHdc(), BP_CHECKBOX,
nState, &rect, 0);
}
//*************************************************************************************
void CBCGPWinXPVisualManager::OnDrawControlBorder (CWnd* pWndCtrl)
{
if (m_hThemeWindow == NULL)
{
CBCGPVisualManagerXP::OnDrawControlBorder (pWndCtrl);
return;
}
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, m_clrMenuItemBorder, m_clrMenuItemBorder);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -