[ros-dev] [ros-diffs] [cfinck] 39188: Hack: Copy the toolbar image on our own instead of using CopyImage to hackfix the messed up toolbar graphics as it was done for previous releases.

James Tabor jimtabor.rosdev at gmail.com
Thu Jan 29 00:48:37 CET 2009


Hi!
This is what I've been fighting (BITMAP) with! I should have read this
in previous releases. Take note!
Thanks,
James


--- branches/ros-branch-0_3_8/reactos/dll/win32/comctl32/toolbar.c
[iso-8859-1] (original)
+++ branches/ros-branch-0_3_8/reactos/dll/win32/comctl32/toolbar.c
[iso-8859-1] Wed Jan 28 15:11:36 2009
@@ -2659,7 +2659,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 = 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);


More information about the Ros-dev mailing list