Re: XPStyle Background color in ActiveX controls
Which ActiveX controls are we talking about? Complete custom ones? Or
based on native controls? I've written a bunch of controls that are
based on the native controls (group box, edit, track bar...). I've
managed to make them all draw correctly if placed on themed tab strips -
all except a control that's based on the "static" native control. I was
not yet able to make this one work.
The key is to call DrawThemeParentBackground when drawing the child
control's background. Depending on the control, some more things are
involved, e. g. I ended owner-drawing the whole group box, because this
control flickered like hell.
Here's the code that I use for the track bar control:
// called on OCM_CTLCOLORSTATIC
LRESULT TrackBar::OnReflectedCtlColorStatic(UINT /*message*/, WPARAM
wParam, LPARAM lParam, BOOL& /*wasHandled*/)
{
CTheme themingEngine;
if(flags.usingThemes) {
themingEngine.OpenThemeData(*this, VSCLASS_TRACKBAR);
}
if(themingEngine.IsThemeNull()) {
return reinterpret_cast<LRESULT>(GetSysColorBrush(COLOR_3DFACE));
} else {
// this flag is set when the track bar is resized or moved
if(flags.invalidBackBrush) {
WTL::CRect clientRectangle;
::GetClientRect(reinterpret_cast<HWND>(lParam), &clientRectangle);
CDC memoryDC;
memoryDC.CreateCompatibleDC(reinterpret_cast<HDC>(wParam));
CBitmap memoryBitmap;
memoryBitmap.CreateCompatibleBitmap(
reinterpret_cast<HDC>(wParam), clientRectangle.Width(),
clientRectangle.Height());
HBITMAP hPreviousBitmap = memoryDC.SelectBitmap(memoryBitmap);
memoryDC.SetViewportOrg(-clientRectangle.left,
-clientRectangle.top);
memoryDC.FillRect(&clientRectangle,
GetSysColorBrush(COLOR_3DFACE));
DrawThemeParentBackground(reinterpret_cast<HWND>(lParam),
memoryDC, &clientRectangle);
memoryDC.SelectBitmap(hPreviousBitmap);
if(!themedBackBrush.IsNull()) {
themedBackBrush.DeleteObject();
}
themedBackBrush.CreatePatternBrush(memoryBitmap);
}
return reinterpret_cast<LRESULT>(static_cast<HBRUSH>(themedBackBrush));
}
}
Timo
--
www.TimoSoft-Software.de - Unicode controls for VB6
"Those who sacrifice freedom for safety deserve neither."
"Demokratie ist per Definition unsicher. Ihr Schutz entsteht aus der
?berzeugung, dass die demokratischen Kr?fte ?berwiegen und sich auf
demokratischem Wege durchsetzen."