Thanks @David Lowndes
I'm not actually loading a bitmap as such. To allow for high DPI I'm loading an EMF resource, drawing on a bitmap (of appropriate dpi-dependent size) in memory, and then giving it to my push-like radio button with CButton::SetBitmap(...) or, in particular CMFCButton::SetImage(...)
I've made some progress by doing this in OnInitDialog() rather than the button constructor. The grey has gone but it's still not mapping my input COLOR_BTNFACE=RGB(192,192,192) onto the button colour - empirically RGB(215,215,215). It's coming out as RGB(240,240,240). In fact CButton,and CMFCButton are both doing this, though I think only CMFCButton is documented as doing a mapping.
So I'm still puzzled.
Dave