12 void GlassExtender::DWMCompositionChanged(TMessage& )
17 bool GlassExtender::glassWindow(TWinControl * winControl)
19 const MARGINS margins = { -1 };
20 if (!(SUCCEEDED ( m_ExtendFrameProc(winControl->Handle, &margins ) )))
22 for (
int i = 0 ; i < winControl->ControlCount ; i++)
24 TControl * childControl = winControl->Controls[i];
25 TWinControl * childWinControl =
dynamic_cast<TWinControl *
>(childControl);
26 if ( childWinControl )
28 glassWindow(childWinControl);
37 bool GlassExtender::extendIntoClientAll()
40 if (NULL != m_ExtendFrameProc)
42 return glassWindow(m_Form);
51 if ( (NULL != m_dwmapi) &&
52 (NULL != m_DWMEnabledProc) )
55 if ( SUCCEEDED(m_DWMEnabledProc(&enabled)) )
75 #define LBPSI_HOTSELECTED 2
76 #define LBPSI_SELECTED 3
77 #define LBPSI_SELECTEDNOTFOCUS 4
83 if (NULL == m_DrawThemeTextExProc)
86 if (NULL == m_OpenThemeDataProc)
89 if (NULL == m_CloseThemeDataProc)
92 DTTOPTS dttOpts = {0};
94 RECT R = Rect(itemRect.Left, itemRect.Top, itemRect.Right, itemRect.Bottom);
96 dttOpts.dwSize =
sizeof(DTTOPTS);
97 dttOpts.iGlowSize = 2;
99 dttOpts.crText = clWhite;
102 HANDLE hTheme = m_OpenThemeDataProc(0, L
"WINDOW");
106 dttOpts.crText = clWhite;
110 HRESULT ret = m_DrawThemeTextExProc(hTheme, dc,
LBCP_ITEM, 0,
111 WideString(item).c_bstr(), -1,
112 DT_LEFT | DT_TOP | DT_SINGLELINE | DT_NOPREFIX,
115 m_CloseThemeDataProc(hTheme);
116 return SUCCEEDED(ret);
123 m_ExtendFrameProc(NULL),
124 m_DWMEnabledProc(NULL),
125 m_DrawThemeTextExProc(NULL),
126 m_OpenThemeDataProc(NULL),
136 m_dwmapi = ::SafeLoadLibrary(AnsiString(
"dwmapi.dll"), SEM_NOOPENFILEERRORBOX);
137 m_uxtheme = ::SafeLoadLibrary(AnsiString(
"uxtheme.dll"), SEM_NOOPENFILEERRORBOX);
138 if (NULL != m_uxtheme)
140 m_OpenThemeDataProc = (OpenThemeDataProc)
141 ::GetProcAddress((HMODULE) m_uxtheme,
"OpenThemeData");
142 m_CloseThemeDataProc = (CloseThemeDataProc)
143 ::GetProcAddress((HMODULE) m_uxtheme,
"CloseThemeData");
144 m_DrawThemeTextExProc = (DrawThemeTextExProc)
145 ::GetProcAddress((HMODULE) m_uxtheme,
"DrawThemeTextEx");
148 if (NULL != m_dwmapi)
150 m_ExtendFrameProc = (ExtendFrameProc)
151 ::GetProcAddress((HMODULE) m_dwmapi,
"DwmExtendFrameIntoClientArea");
152 m_DWMEnabledProc = (DWMEnabledProc)
153 ::GetProcAddress((HMODULE) m_dwmapi,
"DwmIsCompositionEnabled");
154 extendIntoClientAll();
165 ::FreeLibrary( (HMODULE) m_dwmapi);
167 ::FreeLibrary( (HMODULE) m_uxtheme);