Author: cfinck Date: Thu Jun 26 17:03:33 2008 New Revision: 34115
URL: http://svn.reactos.org/svn/reactos?rev=34115&view=rev Log: Hack: Copy the toolbar image on our own instead of using CopyImage to solve the messed up toolbar graphics. See r31924 for more details
Modified: branches/ros-branch-0_3_5/reactos/dll/win32/comctl32/toolbar.c
Modified: branches/ros-branch-0_3_5/reactos/dll/win32/comctl32/toolbar.c URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_5/reactos/dll/win... ============================================================================== --- branches/ros-branch-0_3_5/reactos/dll/win32/comctl32/toolbar.c [iso-8859-1] (original) +++ branches/ros-branch-0_3_5/reactos/dll/win32/comctl32/toolbar.c [iso-8859-1] Thu Jun 26 17:03:33 2008 @@ -2666,7 +2666,33 @@ TRACE("adding hInst=%p nID=%d nButtons=%d\n", bitmap->hInst, bitmap->nID, bitmap->nButtons); /* Add bitmaps to the default image list */ if (bitmap->hInst == NULL) /* a handle was passed */ - hbmLoad = (HBITMAP)CopyImage(ULongToHandle(bitmap->nID), IMAGE_BITMAP, 0, 0, 0); + { + BITMAP bmp; + HBITMAP hOldBitmapBitmap, hOldBitmapLoad; + HDC hdcImage, hdcBitmap; + + /* copy the bitmap before adding it so that the user's bitmap + * doesn't get modified. + */ + GetObjectW ((HBITMAP)bitmap->nID, sizeof(BITMAP), (LPVOID)&bmp); + + hdcImage = CreateCompatibleDC(0); + hdcBitmap = CreateCompatibleDC(0); + + /* create new bitmap */ + hbmLoad = CreateBitmap (bmp.bmWidth, bmp.bmHeight, bmp.bmPlanes, bmp.bmBitsPixel, NULL); + hOldBitmapBitmap = SelectObject(hdcBitmap, (HBITMAP)bitmap->nID); + hOldBitmapLoad = SelectObject(hdcImage, hbmLoad); + + /* Copy the user's image */ + BitBlt (hdcImage, 0, 0, bmp.bmWidth, bmp.bmHeight, + hdcBitmap, 0, 0, SRCCOPY); + + SelectObject (hdcImage, hOldBitmapLoad); + SelectObject (hdcBitmap, hOldBitmapBitmap); + DeleteDC (hdcImage); + DeleteDC (hdcBitmap); + } else hbmLoad = CreateMappedBitmap(bitmap->hInst, bitmap->nID, 0, NULL, 0);