From: Jérôme Gardou Date: Wed, 1 Sep 2010 10:56:10 +0000 (+0000) Subject: [USER32] X-Git-Tag: backups/reactos-yarotows@57446~21 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=7b457ade67bbef1323d036f76bdf04e83145d4b6 [USER32] - Use Screen capabilities to create icons bitmaps. svn path=/branches/reactos-yarotows/; revision=48673 --- diff --git a/dll/win32/user32/windows/cursoricon.c b/dll/win32/user32/windows/cursoricon.c index 0c88734834c..f7ada0b80af 100644 --- a/dll/win32/user32/windows/cursoricon.c +++ b/dll/win32/user32/windows/cursoricon.c @@ -458,10 +458,16 @@ static BOOL create_icon_bitmaps( const BITMAPINFO *bmi, int width, int height, void *color_bits, *mask_bits; BOOL ret = FALSE; HDC hdc = 0; + static HDC hScreenDC = 0; if (!(info = HeapAlloc( GetProcessHeap(), 0, max( size, FIELD_OFFSET( BITMAPINFO, bmiColors[2] ))))) return FALSE; - if (!(hdc = CreateCompatibleDC( 0 ))) goto done; + if(!hScreenDC) + { + hScreenDC = GetDC(0); + if(!hScreenDC) goto done; + } + if (!(hdc = CreateCompatibleDC(hScreenDC))) goto done; memcpy( info, bmi, size ); info->bmiHeader.biHeight /= 2; @@ -485,8 +491,8 @@ static BOOL create_icon_bitmaps( const BITMAPINFO *bmi, int width, int height, else { if (!(*mask = CreateBitmap( width, height, 1, 1, NULL ))) goto done; - if (!(*color = CreateBitmap( width, height, bmi->bmiHeader.biPlanes, - bmi->bmiHeader.biBitCount, NULL ))) + if (!(*color = CreateBitmap( width, height, GetDeviceCaps(hScreenDC, PLANES), + GetDeviceCaps(hScreenDC, BITSPIXEL), NULL ))) { DeleteObject( *mask ); goto done; @@ -523,7 +529,7 @@ static BOOL create_icon_bitmaps( const BITMAPINFO *bmi, int width, int height, ret = TRUE; done: - DeleteDC( hdc ); + if(hdc) DeleteDC( hdc ); HeapFree( GetProcessHeap(), 0, info ); return ret; }