-// These are the default colors used to map the bitmap colors
-// to the current system colors
-
-// VZ: why are they BGR and not RGB? just to confuse the people or is there a
-// deeper reason?
-#define BGR_BUTTONTEXT (RGB(000,000,000)) // black
-#define BGR_BUTTONSHADOW (RGB(128,128,128)) // dark grey
-#define BGR_BUTTONFACE (RGB(192,192,192)) // bright grey
-#define BGR_BUTTONHILIGHT (RGB(255,255,255)) // white
-#define BGR_BACKGROUNDSEL (RGB(255,000,000)) // blue
-#define BGR_BACKGROUND (RGB(255,000,255)) // magenta
-
-void wxMapBitmap(HBITMAP hBitmap, int width, int height)
-{
- COLORMAP ColorMap[] =
- {
- {BGR_BUTTONTEXT, COLOR_BTNTEXT}, // black
- {BGR_BUTTONSHADOW, COLOR_BTNSHADOW}, // dark grey
- {BGR_BUTTONFACE, COLOR_BTNFACE}, // bright grey
- {BGR_BUTTONHILIGHT, COLOR_BTNHIGHLIGHT},// white
- {BGR_BACKGROUNDSEL, COLOR_HIGHLIGHT}, // blue
- {BGR_BACKGROUND, COLOR_WINDOW} // magenta
- };
-
- int NUM_MAPS = (sizeof(ColorMap)/sizeof(COLORMAP));
- int n;
- for ( n = 0; n < NUM_MAPS; n++)
- {
- ColorMap[n].to = ::GetSysColor(ColorMap[n].to);
- }
-
- HBITMAP hbmOld;
- HDC hdcMem = CreateCompatibleDC(NULL);
-
- if (hdcMem)
- {
- hbmOld = (HBITMAP) SelectObject(hdcMem, hBitmap);
-
- int i, j, k;
- for ( i = 0; i < width; i++)
- {
- for ( j = 0; j < height; j++)
+ if ( UseBgCol() )
+ {
+ // do draw our background
+ //
+ // notice that this 'dumb' implementation may cause flicker for some of
+ // the controls in which case they should intercept wxEraseEvent and
+ // process it themselves somehow
+ AutoHBRUSH hBrush(wxColourToRGB(GetBackgroundColour()));
+
+ wxCHANGE_HDC_MAP_MODE(hdc, MM_TEXT);
+ ::FillRect(hdc, &rect, hBrush);
+ }
+ else // we have no non default background colour
+ {
+#if wxUSE_UXTHEME
+ // we may need to draw themed colour so that we appear correctly on
+ // e.g. notebook page under XP with themes but only do it if the parent
+ // draws themed background itself
+ if ( !GetParent()->UseBgCol() )