-// Some experiments...
-#if 0
-// What we want to do is create another bitmap which has a depth of 4,
-// and set the bits. So probably we want to convert this HBITMAP into a
-// DIB, then call SetDIBits.
-// AAAGH. The stupid thing is that if newBitmap has a depth of 4 (less than that of
-// the screen), then SetDIBits fails.
-HBITMAP newBitmap = ::CreateBitmap(totalBitmapWidth, totalBitmapHeight, 1, 4, NULL);
-HANDLE newDIB = ::BitmapToDIB((HBITMAP) m_hBitmap, NULL);
-LPBITMAPINFOHEADER lpbmi = (LPBITMAPINFOHEADER) GlobalLock(newDIB);
-
-dc = ::GetDC(NULL);
-// LPBITMAPINFOHEADER lpbmi = (LPBITMAPINFOHEADER) newDIB;
-
-int result = ::SetDIBits(dc, newBitmap, 0, lpbmi->biHeight, FindDIBBits((LPSTR)lpbmi), (LPBITMAPINFO)lpbmi,
- DIB_PAL_COLORS);
-DWORD err = GetLastError();
-
-::ReleaseDC(NULL, dc);
-
-// Delete the DIB
-GlobalUnlock (newDIB);
-GlobalFree (newDIB);
-
-// WXHBITMAP hBitmap2 = wxCreateMappedBitmap((WXHINSTANCE) wxGetInstance(), (WXHBITMAP) m_hBitmap);
-// Substitute our new bitmap for the old one
-::DeleteObject((HBITMAP) m_hBitmap);
-m_hBitmap = (WXHBITMAP) newBitmap;
-#endif
+ // create the target bitmap
+ HBITMAP hbmpDst = ::CreateCompatibleBitmap(hdcDst, width, height);
+ if ( !hbmpDst )
+ {
+ wxLogLastError(_T("CreateCompatibleBitmap"));
+
+ return bitmap;
+ }
+
+ // create the monochrome mask bitmap
+ HBITMAP hbmpMask = ::CreateBitmap(width, height, 1, 1, 0);
+ if ( !hbmpMask )
+ {
+ wxLogLastError(_T("CreateBitmap(mono)"));
+
+ ::DeleteObject(hbmpDst);