109 lines
3.5 KiB
C++
109 lines
3.5 KiB
C++
// ==========================================================================
|
|
// Class Implementation : COXUxTheme
|
|
// ==========================================================================
|
|
|
|
// Source file: OXUxTheme.cpp
|
|
|
|
// Version: 9.3
|
|
|
|
// This software along with its related components, documentation and files ("The Libraries")
|
|
// is © 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
|
|
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
|
|
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
|
|
// to obtain this file, or directly from our office. For a copy of the license governing
|
|
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
|
|
|
|
#include "stdafx.h"
|
|
#include "OXUxTheme.h"
|
|
#include <comdef.h>
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[]=__FILE__;
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
COXUxTheme::COXUxTheme()
|
|
{
|
|
m_hThemeDLL = ::LoadLibrary(_T("UxTheme.dll"));
|
|
}
|
|
|
|
COXUxTheme::~COXUxTheme()
|
|
{
|
|
if (m_hThemeDLL != NULL)
|
|
::FreeLibrary(m_hThemeDLL);
|
|
}
|
|
|
|
BOOL COXUxTheme::IsUxThemeLoaded()
|
|
{
|
|
if (m_hThemeDLL != NULL)
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
HTHEME COXUxTheme::GetWindowTheme(HWND hWnd)
|
|
{
|
|
if (!IsUxThemeLoaded())
|
|
return NULL;
|
|
|
|
ASSERT(m_hThemeDLL != NULL);
|
|
|
|
HTHEME (PASCAL* pfnGetWindowTheme)(HWND hWnd) = NULL;
|
|
(FARPROC&) pfnGetWindowTheme = ::GetProcAddress(m_hThemeDLL, "GetWindowTheme");
|
|
HTHEME hTheme = (*pfnGetWindowTheme)(hWnd);
|
|
return hTheme;
|
|
}
|
|
|
|
BOOL COXUxTheme::DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, LPCRECT pRect, LPCRECT pClipRect)
|
|
{
|
|
ASSERT(m_hThemeDLL != NULL);
|
|
|
|
HRESULT (PASCAL* pfnDrawThemeBackground)(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, LPCRECT pRect, LPCRECT pClipRect) = NULL;
|
|
(FARPROC&) pfnDrawThemeBackground = ::GetProcAddress(m_hThemeDLL, "DrawThemeBackground");
|
|
HRESULT hr = (*pfnDrawThemeBackground)(hTheme, hdc, iPartId, iStateId, pRect, pClipRect);
|
|
|
|
if (hr == S_OK)
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL COXUxTheme::DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, LPCTSTR lpszText, int iCharCount, DWORD dwTextFlags, DWORD dwTextFlags2, LPCRECT pRect)
|
|
|
|
{
|
|
ASSERT(m_hThemeDLL != NULL);
|
|
|
|
HRESULT (PASCAL* pfnDrawThemeText)(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, LPCWSTR lpszText, int iCharCount, DWORD dwTextFlags, DWORD dwTextFlags2, LPCRECT pRect) = NULL;
|
|
(FARPROC&) pfnDrawThemeText = ::GetProcAddress(m_hThemeDLL, "DrawThemeText");
|
|
HRESULT hr = (*pfnDrawThemeText)(hTheme, hdc, iPartId, iStateId, _bstr_t(lpszText), iCharCount, dwTextFlags, dwTextFlags2, pRect);
|
|
|
|
if (hr == S_OK)
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
COLORREF COXUxTheme::GetThemeSysColor(HTHEME hTheme, int iColorID)
|
|
{
|
|
ASSERT(m_hThemeDLL != NULL);
|
|
|
|
COLORREF (PASCAL* pfnGetThemeSysColor)(HTHEME hTheme, int iColorID) = NULL;
|
|
(FARPROC&) pfnGetThemeSysColor = ::GetProcAddress(m_hThemeDLL, "GetThemeSysColor");
|
|
return (*pfnGetThemeSysColor)(hTheme, iColorID);
|
|
}
|
|
|
|
HTHEME COXUxTheme::OpenThemeData(HWND hWnd, LPCTSTR lpszClassList)
|
|
{
|
|
if (m_hThemeDLL == NULL)
|
|
return NULL;
|
|
|
|
HTHEME (PASCAL* pfnOpenThemeData)(HWND hWnd, LPCWSTR pszClassList) = NULL;
|
|
(FARPROC&) pfnOpenThemeData = ::GetProcAddress(m_hThemeDLL, "OpenThemeData");
|
|
return (*pfnOpenThemeData)(hWnd, _bstr_t(lpszClassList));
|
|
}
|