user32: fix color mask handling in CreateIconIndirect
Mike Kaplinskiy
mike.kaplinskiy at gmail.com
Sun Dec 20 23:25:10 CST 2009
We can't select a bitmap into a non-memory DC, so create another
memory DC for the monochrome conversion.
This fixes the cursor issue in company of heroes.
-------------- next part --------------
diff --git a/dlls/user32/cursoricon.c b/dlls/user32/cursoricon.c
index 248f3a0..6773914 100644
--- a/dlls/user32/cursoricon.c
+++ b/dlls/user32/cursoricon.c
@@ -2218,23 +2218,25 @@ HICON WINAPI CreateIconIndirect(PICONINFO iconinfo)
}
else
{
- HDC hdc, hdc_mem;
- HBITMAP hbmp_old, hbmp_mem_old, hbmp_mono;
+ HDC hdc, hdc_mem, hdc_mem2;
+ HBITMAP hbmp_mem_old, hbmp_mem2_old, hbmp_mono;
hdc = GetDC( 0 );
hdc_mem = CreateCompatibleDC( hdc );
+ hdc_mem2 = CreateCompatibleDC( hdc );
hbmp_mono = CreateBitmap( bmpAnd.bmWidth, bmpAnd.bmHeight, 1, 1, NULL );
- hbmp_old = SelectObject( hdc, iconinfo->hbmMask );
- hbmp_mem_old = SelectObject( hdc_mem, hbmp_mono );
+ hbmp_mem_old = SelectObject( hdc_mem, iconinfo->hbmMask );
+ hbmp_mem2_old = SelectObject( hdc_mem2, hbmp_mono );
- BitBlt( hdc_mem, 0, 0, bmpAnd.bmWidth, bmpAnd.bmHeight, hdc, 0, 0, SRCCOPY );
+ BitBlt( hdc_mem2, 0, 0, bmpAnd.bmWidth, bmpAnd.bmHeight, hdc_mem, 0, 0, SRCCOPY );
- SelectObject( hdc, hbmp_old );
SelectObject( hdc_mem, hbmp_mem_old );
+ SelectObject( hdc_mem2, hbmp_mem2_old );
DeleteDC( hdc_mem );
+ DeleteDC( hdc_mem2 );
ReleaseDC( 0, hdc );
GetBitmapBits( hbmp_mono, sizeAnd, info + 1 );
More information about the wine-patches
mailing list