[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