Actually its probably due to the printer DC not supporting BitBlt.

In MFC you see this where it works for print preview (A screen DC support BitBlt) and not for the rendered output (the printer DC does not support bitBlt).

If you write your code to make use of StretchDIBits() you should find that this function works for all DCs.