themed.cpp
来自「管理项目进度工具的原代码」· C++ 代码 · 共 616 行 · 第 1/2 页
CPP
616 行
COLORREF color;
if (GetThemeColor(nPart, nState, nProp, &color))
return color;
return 0; // black
}
BOOL CThemed::GetThemeBackgroundContentRect(CDC* pDC, int nPart, int nState, const CRect& rBounding, CRect& rContent)
{
ASSERT (m_hTheme);
ASSERT_VALID (pDC);
return GetThemeBackgroundContentRect(pDC->GetSafeHdc(), nPart, nState, rBounding, rContent);
}
// -----------------------------------------------------------------------------------------------------------
BOOL CThemed::IsThemeActive()
{
if (s_hUxTheme)
{
PFNISTHEMEACTIVE fnIsThemeActive = (PFNISTHEMEACTIVE)GetProcAddress(s_hUxTheme, "IsThemeActive");
if (fnIsThemeActive)
return fnIsThemeActive();
}
return FALSE;
}
DWORD CThemed::GetAppThemeProperties()
{
if (s_hUxTheme)
{
PFNGETTHEMEAPPPROPERTIES fnGetThemeAppProperties = (PFNGETTHEMEAPPPROPERTIES)GetProcAddress(s_hUxTheme, "GetThemeAppProperties");
if (fnGetThemeAppProperties)
return fnGetThemeAppProperties();
}
return 0;
}
HTHEME CThemed::OpenThemeData(HWND hwnd, LPCWSTR pszClassList)
{
if (s_hUxTheme)
{
PFNOPENTHEMEDATA fnOpenThemeData = (PFNOPENTHEMEDATA)GetProcAddress(s_hUxTheme, "OpenThemeData");
if (fnOpenThemeData)
return fnOpenThemeData(hwnd, pszClassList);
}
return NULL;
}
BOOL CThemed::CloseThemeData(HTHEME hTheme)
{
if (s_hUxTheme && hTheme)
{
PFNCLOSETHEMEDATA fnCloseThemeData = (PFNCLOSETHEMEDATA)GetProcAddress(s_hUxTheme, "CloseThemeData");
if (fnCloseThemeData)
return SUCCEEDED(fnCloseThemeData(m_hTheme));
}
return FALSE;
}
BOOL CThemed::DrawThemeBackground(HDC hdc, int iPartId, int iStateId, const RECT *pRect,
const RECT *pClipRect)
{
if (s_hUxTheme && m_hTheme)
{
PFNDRAWTHEMEBACKGROUND fnDrawThemeBackground = (PFNDRAWTHEMEBACKGROUND)GetProcAddress(s_hUxTheme, "DrawThemeBackground");
if (fnDrawThemeBackground)
return (SUCCEEDED(fnDrawThemeBackground(m_hTheme, hdc, iPartId, iStateId, pRect, pClipRect)));
}
return FALSE;
}
BOOL CThemed::DrawThemeParentBackground(HWND hWnd, HDC hdc, RECT *pRect)
{
if (s_hUxTheme && m_hTheme)
{
PFNDRAWTHEMEPARENTBACKGROUND fnDrawThemeParentBackground = (PFNDRAWTHEMEPARENTBACKGROUND)GetProcAddress(s_hUxTheme, "DrawThemeParentBackground");
if (fnDrawThemeParentBackground)
return (SUCCEEDED(fnDrawThemeParentBackground(hWnd, hdc, pRect)));
}
return FALSE;
}
BOOL CThemed::DrawThemeText(HDC hdc, int iPartId, int iStateId, LPCWSTR pszText, int iCharCount,
DWORD dwTextFlags, DWORD dwTextFlags2, const RECT *pRect)
{
if (s_hUxTheme && m_hTheme)
{
PFNDRAWTHEMETEXT fnDrawThemeText = (PFNDRAWTHEMETEXT)GetProcAddress(s_hUxTheme, "DrawThemeText");
if (fnDrawThemeText)
return (SUCCEEDED(fnDrawThemeText(m_hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect)));
}
return FALSE;
}
BOOL CThemed::DrawThemeEdge(HDC hdc, int iPartId, int iStateId, const RECT *pDestRect, UINT uEdge,
UINT uFlags, RECT *pContentRect)
{
if (s_hUxTheme && m_hTheme)
{
PFNDRAWTHEMEEDGE fnDrawThemeEdge = (PFNDRAWTHEMEEDGE)GetProcAddress(s_hUxTheme, "DrawThemeEdge");
if (fnDrawThemeEdge)
return (SUCCEEDED(fnDrawThemeEdge(m_hTheme, hdc, iPartId, iStateId, pDestRect, uEdge, uFlags, pContentRect)));
}
return FALSE;
}
BOOL CThemed::DrawThemeIcon(HDC hdc, int iPartId, int iStateId, const RECT *pRect, HIMAGELIST himl,
int iImageIndex)
{
if (s_hUxTheme && m_hTheme)
{
PFNDRAWTHEMEICON fnDrawThemeIcon = (PFNDRAWTHEMEICON)GetProcAddress(s_hUxTheme, "DrawThemeIcon");
if (fnDrawThemeIcon)
return (SUCCEEDED(fnDrawThemeIcon(m_hTheme, hdc, iPartId, iStateId, pRect, himl, iImageIndex)));
}
return FALSE;
}
BOOL CThemed::DrawThemeBorder(HDC hdc, int iStateId, const RECT *pRect)
{
if (s_hUxTheme && m_hTheme)
{
PFNDRAWTHEMEBORDER fnDrawThemeBorder = (PFNDRAWTHEMEBORDER)GetProcAddress(s_hUxTheme, "DrawThemeBorder");
if (fnDrawThemeBorder)
return (SUCCEEDED(fnDrawThemeBorder(m_hTheme, hdc, iStateId, pRect)));
}
return FALSE;
}
BOOL CThemed::GetThemePartSize(int iPartId, int iStateId, THEMESIZE eSize, SIZE *psz)
{
if (s_hUxTheme && m_hTheme)
{
PFNGETTHEMEPARTSIZE fnGetThemePartSize = (PFNGETTHEMEPARTSIZE)GetProcAddress(s_hUxTheme, "GetThemePartSize");
if (fnGetThemePartSize)
return (SUCCEEDED(fnGetThemePartSize(m_hTheme, NULL, iPartId, iStateId, NULL, eSize, psz)));
}
return FALSE;
}
BOOL CThemed::GetThemeTextExtent(HDC hdc, int iPartId, int iStateId, LPCWSTR pszText, int iCharCount,
DWORD dwTextFlags, const RECT *pBoundingRect, RECT *pExtentRect)
{
if (s_hUxTheme && m_hTheme)
{
PFNGETTHEMETEXTEXTENT fnGetThemeTextExtent = (PFNGETTHEMETEXTEXTENT)GetProcAddress(s_hUxTheme, "GetThemeTextExtent");
if (fnGetThemeTextExtent)
return (SUCCEEDED(fnGetThemeTextExtent(m_hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, pBoundingRect, pExtentRect)));
}
return FALSE;
}
BOOL CThemed::GetThemeColor(int iPartId, int iStateId, int iPropId, COLORREF *pColor)
{
if (s_hUxTheme && m_hTheme)
{
PFNGETTHEMECOLOR fnGetThemeColor = (PFNGETTHEMECOLOR)GetProcAddress(s_hUxTheme, "GetThemeColor");
if (fnGetThemeColor)
return (SUCCEEDED(fnGetThemeColor(m_hTheme, iPartId, iStateId, iPropId, pColor)));
}
return FALSE;
}
BOOL CThemed::GetThemeBackgroundContentRect(HDC hdc, int iPartId, int iStateId, LPCRECT pBoundingRect, LPRECT pContentRect)
{
if (s_hUxTheme && m_hTheme)
{
PFNGETTHEMEBACKGROUNDCONTENTRECT fnGetContentRect = (PFNGETTHEMEBACKGROUNDCONTENTRECT)
GetProcAddress(s_hUxTheme, "GetThemeBackgroundContentRect");
if (fnGetContentRect)
return (SUCCEEDED(fnGetContentRect(m_hTheme, hdc, iPartId, iStateId, pBoundingRect, pContentRect)));
}
return FALSE;
}
// -----------------------------------------------------------------------------------------------------------
BOOL CThemed::GetThemeClassPartState(int nType, int nState, CString& sThClass, int& nThPart, int& nThState)
{
sThClass.Empty();
nThPart = 0;
nThState = 0;
switch (nType)
{
case DFC_BUTTON:
{
sThClass = "BUTTON";
nThState = PBS_NORMAL;
if (nState & DFCS_BUTTONPUSH)
{
nThPart = BP_PUSHBUTTON;
if (nState & (DFCS_CHECKED | DFCS_PUSHED))
nThState = PBS_PRESSED;
else if (nState & DFCS_INACTIVE)
nThState = PBS_DISABLED;
else if (nState & DFCS_HOT)
nThState = PBS_HOT;
}
/* else if (nState & DFCS_BUTTONRADIO)
{
nThPart = BP_RADIOBUTTON;
}*/
else if ((nState & DFCS_BUTTONCHECK) == DFCS_BUTTONCHECK)
{
nThPart = BP_CHECKBOX;
if (nState & (DFCS_CHECKED | DFCS_PUSHED))
{
if (nState & DFCS_INACTIVE)
nThState = CBS_CHECKEDDISABLED;
else if (nState & DFCS_HOT)
nThState = CBS_CHECKEDHOT;
else
nThState = CBS_CHECKEDNORMAL;
}
else
{
if (nState & DFCS_INACTIVE)
nThState = CBS_UNCHECKEDDISABLED;
else if (nState & DFCS_HOT)
nThState = CBS_UNCHECKEDHOT;
else
nThState = CBS_UNCHECKEDNORMAL;
}
}
else
return FALSE;
}
break;
case DFC_CAPTION:
break;
case DFC_MENU:
break;
case DFC_POPUPMENU:
break;
case DFC_SCROLL:
{
if (nState & DFCS_SCROLLCOMBOBOX)
{
sThClass = "COMBOBOX";
nThPart = CP_DROPDOWNBUTTON;
nThState = CBXS_NORMAL;
if (nState & (DFCS_CHECKED | DFCS_PUSHED))
nThState = CBXS_PRESSED;
else if (nState & DFCS_INACTIVE)
nThState = CBXS_DISABLED;
else if (nState & DFCS_HOT)
nThState = CBXS_HOT;
}
else if (nState & DFCS_SCROLLSIZEGRIP)
{
sThClass = "SCROLLBAR";
nThPart = SBP_SIZEBOX;
nThState = (nState & DFCS_SCROLLLEFT) ? SZB_LEFTALIGN : SZB_RIGHTALIGN;
}
// else
}
break;
}
return (!sThClass.IsEmpty() && (nThPart && nThState));
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?