📄 extpaintmanager.cpp
字号:
0,0,0,0,0,0,0,0,0,
};
static const UINT stat_pixels_dock_btn_contexthelp[] =
{
0,0,0,1,1,1,1,0,0,
0,0,1,1,0,0,1,1,0,
0,0,1,1,0,0,1,1,0,
0,0,0,0,0,1,1,0,0,
0,0,0,0,1,1,0,0,0,
0,0,0,0,1,1,0,0,0,
0,0,0,0,0,0,0,0,0,
0,0,0,0,1,1,0,0,0,
0,0,0,0,1,1,0,0,0,
};
static CExtPaintManager::glyph_t stat_glyph_dock_empty(
9,9,2,
stat_pixels_dock_btn_empty
);
static CExtPaintManager::glyph_t stat_glyph_dock_close(
9,9,2,
stat_pixels_dock_btn_close
);
static CExtPaintManager::glyph_t stat_glyph_dock_close_dc2k(
9,9,2,
stat_pixels_dock_btn_close_dc2k
);
static CExtPaintManager::glyph_t stat_glyph_dock_xp_thin_close(
9,9,2,
stat_pixels_dock_btn_thin_close
);
static CExtPaintManager::glyph_t stat_glyph_dock_arrow_up(
9,9,2,
stat_pixels_dock_btn_arrow_up
);
static CExtPaintManager::glyph_t stat_glyph_dock_arrow_down(
stat_glyph_dock_arrow_up,
180
);
static CExtPaintManager::glyph_t stat_glyph_dock_arrow_left(
stat_glyph_dock_arrow_up,
270
);
static CExtPaintManager::glyph_t stat_glyph_dock_arrow_right(
stat_glyph_dock_arrow_left,
180
);
static CExtPaintManager::glyph_t stat_glyph_dock_wnd_minimize(
9,9,2,
stat_pixels_dock_wnd_minimize
);
static CExtPaintManager::glyph_t stat_glyph_dock_wnd_restore(
9,9,2,
stat_pixels_dock_wnd_restore
);
static CExtPaintManager::glyph_t stat_glyph_dock_wnd_maximize(
9,9,2,
stat_pixels_dock_wnd_maximize
);
static CExtPaintManager::glyph_t stat_glyph_dock_wnd_keep(
9,9,2,
stat_pixels_dock_wnd_keep
);
static CExtPaintManager::glyph_t stat_glyph_dock_wnd_unkeep(
stat_glyph_dock_wnd_keep,
90
);
static CExtPaintManager::glyph_t stat_glyph_dock_wnd_contexthelp(
9,9,2,
stat_pixels_dock_btn_contexthelp
);
static CExtPaintManager::glyph_t stat_glyph_dock_arrow_up_l(
9,9,2,
stat_pixels_dock_btn_arrow_up_l
);
static CExtPaintManager::glyph_t stat_glyph_dock_arrow_down_l(
stat_glyph_dock_arrow_up_l,
180
);
static CExtPaintManager::glyph_t stat_glyph_dock_arrow_left_l(
stat_glyph_dock_arrow_up_l,
270
);
static CExtPaintManager::glyph_t stat_glyph_dock_arrow_right_l(
stat_glyph_dock_arrow_left_l,
180
);
static CExtPaintManager::glyph_t stat_glyph_dock_hollow_up(
9,9,2,
stat_pixels_dock_btn_hollow_up
);
static CExtPaintManager::glyph_t stat_glyph_dock_hollow_down(
stat_glyph_dock_hollow_up,
180
);
static CExtPaintManager::glyph_t stat_glyph_dock_hollow_left(
stat_glyph_dock_hollow_up,
270
);
static CExtPaintManager::glyph_t stat_glyph_dock_hollow_right(
stat_glyph_dock_hollow_left,
180
);
CExtPaintManager::glyph_t *
CExtPaintManager::g_DockingCaptionGlyphs[__DCBT_VALUE_MAX+1] =
{
& stat_glyph_dock_empty,
& stat_glyph_dock_close,
& stat_glyph_dock_arrow_up,
& stat_glyph_dock_arrow_down,
& stat_glyph_dock_arrow_left,
& stat_glyph_dock_arrow_right,
& stat_glyph_dock_wnd_minimize,
& stat_glyph_dock_wnd_restore,
& stat_glyph_dock_wnd_maximize,
& stat_glyph_dock_wnd_contexthelp,
& stat_glyph_dock_wnd_keep,
& stat_glyph_dock_wnd_unkeep,
& stat_glyph_dock_arrow_up_l,
& stat_glyph_dock_arrow_down_l,
& stat_glyph_dock_arrow_left_l,
& stat_glyph_dock_arrow_right_l,
& stat_glyph_dock_xp_thin_close,
& stat_glyph_dock_hollow_up,
& stat_glyph_dock_hollow_down,
& stat_glyph_dock_hollow_left,
& stat_glyph_dock_hollow_right,
& stat_glyph_dock_close_dc2k,
};
void CExtPaintManager::PaintDockingCaptionButton(
CDC & dc,
const CRect & rectClient,
e_docking_caption_button_t eType,
bool bHover,
bool bPushed,
bool bEnabled,
bool bSideBar,
bool bBarWndActive,
bool bFloating
)
{
bBarWndActive;
bSideBar;
bFloating;
ASSERT( dc.GetSafeHdc() != NULL );
ASSERT(
__DCBT_VALUE_MIN <= eType
&&
eType <= __DCBT_VALUE_MAX
);
if( rectClient.IsRectEmpty() )
return;
if( !bEnabled )
bHover = false;
/*
COLORREF ColorValues[2] =
{
RGB(0,0,0),
RGB(0,0,0),
};
COLORREF clr3dHilight =
GetColor( COLOR_3DHILIGHT );
if( bEnabled )
{
if( ! (bHover || bPushed) )
ColorValues[1] = clr3dHilight;
} // if( bEnabled )
else
{
ColorValues[1] = GetColor( COLOR_3DFACE );
} // else from if( bEnabled )
CRect rcGlyph( rectClient );
rcGlyph.NormalizeRect();
if( bHover || bPushed )
dc.FillSolidRect(
&rcGlyph,
clr3dHilight
);
if( rcGlyph.Width() & 1 )
rcGlyph.left++;
if( rcGlyph.Height() & 1 )
rcGlyph.top++;
glyph_t * pGlyph = g_DockingCaptionGlyphs[eType];
ASSERT( pGlyph != NULL );
PaintGlyphCentered(
dc,
rcGlyph,
*pGlyph,
ColorValues
);
*/
COLORREF ColorValues[2] =
{
RGB(0,0,0),
RGB(0,0,0),
};
COLORREF clr3dFace = GetColor( COLOR_3DFACE );
COLORREF clr3dShadow = GetColor( COLOR_3DSHADOW );
COLORREF clr3dDkShadow = GetColor( COLOR_3DDKSHADOW );
COLORREF clr3dHiLight = GetColor( COLOR_3DHILIGHT );
if( !bEnabled )
ColorValues[1] = clr3dShadow;
CRect rcGlyph( rectClient );
rcGlyph.NormalizeRect();
if( rcGlyph.Width() & 1 )
rcGlyph.left++;
if( rcGlyph.Height() & 1 )
rcGlyph.top++;
if( eType == __DCBT_CLOSE )
eType = __DCBT_CLOSE_DC2K;
glyph_t * pGlyph = g_DockingCaptionGlyphs[eType];
ASSERT( pGlyph != NULL );
if( !bFloating )
// rcGlyph.InflateRect( 2, 2 );
// else
rcGlyph.InflateRect( 1, 1 );
rcGlyph.InflateRect( 1, 1, 0, 0 );
dc.FillSolidRect(
&rcGlyph,
clr3dFace
);
CRect rcGlyphShape( rcGlyph );
if( bPushed )
rcGlyphShape.OffsetRect( 1, 1 );
PaintGlyphCentered(
dc,
rcGlyphShape,
*pGlyph,
ColorValues
);
/*
if( bEnabled && bPushed )
{
dc.Draw3dRect(
&rcGlyph,
clr3dDkShadow, clr3dFace
);
rcGlyph.DeflateRect( 1, 1 );
dc.Draw3dRect(
&rcGlyph,
clr3dShadow, clr3dHiLight
);
} // if( bPushed )
else
{
dc.Draw3dRect(
&rcGlyph,
clr3dFace, clr3dDkShadow
);
rcGlyph.DeflateRect( 1, 1 );
dc.Draw3dRect(
&rcGlyph,
clr3dHiLight, clr3dShadow
);
} // else if( bHover )
*/
if( bEnabled && bPushed )
{
dc.Draw3dRect(
&rcGlyph,
clr3dShadow, clr3dHiLight
);
} // if( bEnabled && bPushed )
else if( bEnabled && bHover )
{
dc.Draw3dRect(
&rcGlyph,
clr3dFace, clr3dDkShadow
);
rcGlyph.DeflateRect( 1, 1 );
dc.Draw3dRect(
&rcGlyph,
clr3dHiLight, clr3dShadow
);
} // else if( bEnabled && bHover )
else
{
dc.Draw3dRect(
&rcGlyph,
clr3dHiLight, clr3dShadow
);
} // else ...
}
void CExtPaintManagerXP::PaintDockingCaptionButton(
CDC & dc,
const CRect & rectClient,
e_docking_caption_button_t eType,
bool bHover,
bool bPushed,
bool bEnabled,
bool bSideBar,
bool bBarWndActive,
bool bFloating
)
{
ASSERT( dc.GetSafeHdc() != NULL );
ASSERT(
__DCBT_VALUE_MIN <= eType
&&
eType <= __DCBT_VALUE_MAX
);
if( rectClient.IsRectEmpty() )
return;
if( !bEnabled )
bHover = false;
COLORREF ColorValues[2] =
{
RGB(0,0,0),
RGB(0,0,0),
};
if( bEnabled )
{
if( ! (bHover || bPushed) )
ColorValues[1] =
GetColor(
bSideBar ?
(bBarWndActive
? COLOR_HIGHLIGHTTEXT
: COLOR_3DDKSHADOW // COLOR_BTNTEXT
)
:
COLOR_3DHILIGHT
);
} // if( bEnabled )
else
{
ColorValues[1] =
GetColor(
COLOR_3DSHADOW // COLOR_3DFACE
);
} // else from if( bEnabled )
CRect rcGlyph( rectClient );
rcGlyph.NormalizeRect();
if( bHover || bPushed )
{
dc.FillSolidRect(
&rcGlyph,
//clr3dHilight
GetColor(
bPushed
? XPCLR_HILIGHT
: CLR_3DFACE_IN
)
);
CRect rcBtnBorder(rcGlyph);
rcBtnBorder.InflateRect(1,1);
COLORREF clrBtnBorder =
GetColor(
bBarWndActive
? XPCLR_HILIGHT
: XPCLR_HILIGHT_BORDER
);
dc.Draw3dRect(
rcBtnBorder,
clrBtnBorder,
clrBtnBorder
);
}
if( rcGlyph.Width() & 1 )
rcGlyph.left++;
if( rcGlyph.Height() & 1 )
rcGlyph.top++;
if( bSideBar && !bFloating && eType == __DCBT_CLOSE )
eType = __DCBT_XP_THIN_CLOSE;
glyph_t * pGlyph = g_DockingCaptionGlyphs[eType];
ASSERT( pGlyph != NULL );
PaintGlyphCentered(
dc,
rcGlyph,
*pGlyph,
ColorValues
);
}
void CExtPaintManager::PaintPushButton(
CDC & dc,
bool bHorz,
const CRect & rectClient,
LPCTSTR sText,
HICON hIcon,
bool bFlat,
bool bHover,
bool bPushed,
bool bIndeterminate,
bool bEnabled,
bool bDrawBorder,
bool bDrawFocusRect,
bool bDefaultPushButton,
int eAlign,
CFont * pFont, // = NULL
bool bDropDown, // = false
UINT nHelperSysCmdID, // = 0
bool bTransparentBackground // = false
)
{
if( rectClient.IsRectEmpty() )
return;
if( !bEnabled )
{
bHover = false;
//bDrawBorder = false;
bDrawFocusRect = false;
bIndeterminate = false;
}
COLORREF clrOldText = dc.GetTextColor();
COLORREF clrOldBk = dc.GetBkColor();
int nOldBkMode = dc.SetBkMode( TRANSPARENT );
// Prepare draw... paint button's area with background color
COLORREF bgColor;
if( bHover || bPushed )
bgColor = GetColor(CLR_3DFACE_IN);
else
bgColor = GetColor(CLR_3DFACE_OUT);
if( !bTransparentBackground )
{
//if( bIndeterminate )
if( bEnabled && bPushed && bHover /*&& bFlat*/ )
dc.FillRect( &rectClient, &m_brushLight );
else
{
CBrush br( bgColor );
dc.FillRect( &rectClient, &br );
}
} // if( !bTransparentBackground )
// Draw pressed button
if( bPushed )
{
if( bFlat )
{
if( bDrawBorder )
dc.Draw3dRect(
rectClient,
GetColor(CLR_3DSHADOW_IN),
GetColor(CLR_3DHILIGHT_IN)
);
} // if( bFlat )
else
{
dc.Draw3dRect(
rectClient,
GetColor(CLR_3DSHADOW_IN),
GetColor(CLR_3DHILIGHT_IN)
);
} // else from if( bFlat )
} // if( bPushed )
else // ...else draw non pressed button
{
if( bFlat )
{
if( bHover && bDrawBorder )
{
dc.Draw3dRect(
rectClient,
GetColor(CLR_3DHILIGHT_OUT),
GetColor(CLR_3DSHADOW_OUT)
);
}
} // if( bFlat )
else
{
if( bHover )
{
CRect cc(rectClient);
dc.Draw3dRect(
cc,
GetColor(CLR_3DSHADOW_OUT),
GetColor(CLR_3DDKSHADOW_OUT)
);
cc.DeflateRect(1,1);
dc.Draw3dRect(
cc,
GetColor(CLR_3DHILIGHT_OUT),
GetColor(CLR_3DSHADOW_OUT)
);
} // if( bHover )
else
{
dc.Draw3dRect(
rectClient,
GetColor(CLR_3DHILIGHT_OUT),
GetColor(CLR_3DSHADOW_OUT)
);
} // else from if( bHover )
} // else from if( bFlat )
} // else from if( bPushed )
CString sTitle( _T("") );
if( sText != NULL )
sTitle = sText;
CRect rectClient2( rectClient );
if( bDropDown )
{
CRect rcDopArea( rectClient2 );
COLORREF ColorValues[2] =
{
RGB(0,0,0),
GetColor(
bEnabled ? CLR_TEXT_OUT : CLR_3DSHADOW_OUT
)
};
if( bHorz )
{
rectClient2.right -=
__DROPDOWN_ARROW_GAP*2
+ g_glyph_btn_expand_bottom.Size().cx
;
rcDopArea.left = rectClient2.right;
rcDopArea.DeflateRect(1,1);
rcDopArea.OffsetRect(-1,0);
if( bPushed )
rcDopArea.OffsetRect(
GetPushedOffset()
);
PaintGlyphCentered(
dc,
rcDopArea,
g_glyph_btn_expand_bottom,
ColorValues
);
} // if( bHorz )
else
{
rectClient2.top +=
__DROPDOWN_ARROW_GAP*2
+ g_glyph_btn_expand_right.Size().cy
;
rcDopArea.bottom = rectClient2.top;
rcDopArea.DeflateRect(1,1);
rcDopArea.OffsetRect(0,1);
if( bPushed )
rcDopArea.OffsetRect(
GetPushedOffset()
);
PaintGlyphCentered(
dc,
rcDopArea,
g_glyph_btn_expand_right,
ColorValues
);
} // else from if( bHorz )
} // if( bDropDown )
CRect rectCaption = rectClient2; //lpDIS->rcItem;
// Draw the icon
if( rectClient2.bottom > rectClient2.top
&& rectClient2.right > rectClient2.left
)
{
if( hIcon != NULL )
{
PaintIcon(
dc,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -