I recently needed to revisit this to create simple monochrome bitmaps representing the sets of nozzles turned off/on on a Xaar microarrayer printhead.
Sample code here. Essential steps are outlined in the following code
// 1. Create the uninitialized bitmap, that is compatible // with the the specified device context CPaintDC dc( this ); CBitmap bitmap; bitmap.CreateCompatibleBitmap( &dc, 20, 20 ); // 2. Create memory device context, that is compatible // with the specified device (dc in this case) CDC dcMem; dcMem.CreateCompatibleDC( &dc ); // 3. Obtain/create the bitmap and select into // the memory device context. CBrush brushblue( RGB( 0, 0, 255 ) ); CBrush brush( RGB( 0, 255, 255 ) ); CBitmap* pOldBitmap = dcMem.SelectObject( &bitmap ); dcMem.FillRect( CRect( 0, 0, 10, 10 ), &brushblue ); dcMem.FillRect( CRect( 10, 0, 20, 10 ), &brush ); dcMem.FillRect( CRect( 0, 10, 10, 20 ), &brush ); dcMem.FillRect( CRect( 10, 10, 20, 20 ), &brushblue ); // 4. Obtain the bitmap dimensions in pixels, making sure // they are then mapped into their corresponding logical // units BITMAP bm; bitmap.GetBitmap( &bm ); CPoint size( bm.bmWidth, bm.bmHeight ); CPoint org( 0, 0 ); dc.DPtoLP( &size ); dc.DPtoLP( &org ); // 5. Specify the memory device context’s mapping mode: // MM_ANISOTROPIC, MM_HIENGLISH etc dcMem.SetMapMode( dc.GetMapMode() ); // 6. ‘Blit’ the rectangular block of pixel data from // the source device context (dcMem) to the destination // device context (dc) dc.BitBlt( 12, 12, size.x, size.y, &dcMem, org.x, org.y, SRCCOPY ); // 7. Restore the default bitmap dcMem.SelectObject( pOldBitmap );
A simple dialog application example to download: Bitmaps.zip