Use DrawFrameControl instead of bitmaps in certain cases.
Moved remaining OEM bitmaps to user32 resources.

diff --git a/controls/menu.c b/controls/menu.c
index 2a0d211..3c1b9b3 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -146,15 +146,7 @@
 static WORD arrow_bitmap_width = 0, arrow_bitmap_height = 0;
 
 static HBITMAP hStdMnArrow = 0;
-
-/* Minimze/restore/close buttons to be inserted in menubar */
-static HBITMAP hBmpMinimize = 0;
-static HBITMAP hBmpMinimizeD = 0;
-static HBITMAP hBmpMaximize = 0;
-static HBITMAP hBmpMaximizeD = 0;
-static HBITMAP hBmpClose = 0;
-static HBITMAP hBmpCloseD = 0;
-
+static HBITMAP hBmpSysMenu = 0;
 
 static HBRUSH	hShadeBrush = 0;
 static HFONT	hMenuFont = 0;
@@ -397,12 +389,7 @@
     /* Load menu bitmaps */
     hStdMnArrow = LoadBitmapA(0, MAKEINTRESOURCEA(OBM_MNARROW));
     /* Load system buttons bitmaps */
-    hBmpMinimize = LoadBitmapA(0,MAKEINTRESOURCEA(OBM_REDUCE));
-    hBmpMinimizeD = LoadBitmapA(0,MAKEINTRESOURCEA(OBM_REDUCED));
-    hBmpMaximize = LoadBitmapA(0,MAKEINTRESOURCEA(OBM_RESTORE));
-    hBmpMaximizeD = LoadBitmapA(0,MAKEINTRESOURCEA(OBM_RESTORED));
-    hBmpClose = LoadBitmapA(0,MAKEINTRESOURCEA(OBM_CLOSE));
-    hBmpCloseD = LoadBitmapA(0,MAKEINTRESOURCEA(OBM_CLOSED));
+    hBmpSysMenu = LoadBitmapA(0, MAKEINTRESOURCEA(OBM_CLOSE));
 
     if (hStdMnArrow)
     {
@@ -696,47 +683,150 @@
     }
     return (UINT)(-1);
 }
+
+
 /***********************************************************************
- *           MENU_LoadMagicItem
+ *           MENU_GetBitmapItemSize
  *
- * Load the bitmap associated with the magic menu item and its style
+ * Get the size of a bitmap item.
  */
-
-static HBITMAP MENU_LoadMagicItem(UINT id, BOOL hilite, DWORD dwItemData)
+static void MENU_GetBitmapItemSize( UINT id, DWORD data, SIZE *size )
 {
-    /*
-     * Magic menu item id's section
-     * These magic id's are used by windows to insert "standard" mdi
-     * buttons (minimize,restore,close) on menu. Under windows,
-     * these magic id's make sure the right things appear when those
-     * bitmap buttons are pressed/selected/released.
-     */
+    BITMAP bm;
+    HBITMAP bmp = (HBITMAP)id;
 
-    switch(id & 0xffff)
-    {   case HBMMENU_SYSTEM:
-	    return (dwItemData) ?
-		(HBITMAP)dwItemData :
-		(hilite ? hBmpMinimizeD : hBmpMinimize);
-	case HBMMENU_MBAR_RESTORE:
-	    return (hilite ? hBmpMaximizeD: hBmpMaximize);
-	case HBMMENU_MBAR_MINIMIZE:
-	    return (hilite ? hBmpMinimizeD : hBmpMinimize);
-	case HBMMENU_MBAR_CLOSE:
-	    return (hilite ? hBmpCloseD : hBmpClose);
-	case HBMMENU_CALLBACK:
-	case HBMMENU_MBAR_CLOSE_D:
-	case HBMMENU_MBAR_MINIMIZE_D:
-	case HBMMENU_POPUP_CLOSE:
-	case HBMMENU_POPUP_RESTORE:
-	case HBMMENU_POPUP_MAXIMIZE:
-	case HBMMENU_POPUP_MINIMIZE:
-	default:
-	    FIXME("Magic 0x%08x not implemented\n", id);
-	    return 0;
+    size->cx = size->cy = 0;
+
+    /* check if there is a magic menu item associated with this item */
+    if (id && IS_MAGIC_ITEM( id ))
+    {
+        switch(LOWORD(id))
+        {
+        case HBMMENU_SYSTEM:
+            if (data)
+            {
+                bmp = (HBITMAP)data;
+                break;
+            }
+            /* fall through */
+        case HBMMENU_MBAR_RESTORE:
+        case HBMMENU_MBAR_MINIMIZE:
+        case HBMMENU_MBAR_MINIMIZE_D:
+        case HBMMENU_MBAR_CLOSE:
+        case HBMMENU_MBAR_CLOSE_D:
+            size->cx = GetSystemMetrics( SM_CXSIZE );
+            size->cy = GetSystemMetrics( SM_CYSIZE );
+            return;
+        case HBMMENU_CALLBACK:
+        case HBMMENU_POPUP_CLOSE:
+        case HBMMENU_POPUP_RESTORE:
+        case HBMMENU_POPUP_MAXIMIZE:
+        case HBMMENU_POPUP_MINIMIZE:
+        default:
+            FIXME("Magic 0x%08x not implemented\n", id);
+            return;
+        }
+    }
+    if (GetObjectA(bmp, sizeof(bm), &bm ))
+    {
+        size->cx = bm.bmWidth;
+        size->cy = bm.bmHeight;
+    }
+}
+
+/***********************************************************************
+ *           MENU_DrawBitmapItem
+ *
+ * Draw a bitmap item.
+ */
+static void MENU_DrawBitmapItem( HDC hdc, MENUITEM *lpitem, const RECT *rect, BOOL menuBar )
+{
+    BITMAP bm;
+    DWORD rop;
+    HDC hdcMem;
+    HBITMAP bmp = (HBITMAP)lpitem->text;
+    int w = rect->right - rect->left;
+    int h = rect->bottom - rect->top;
+    int bmp_xoffset = 0;
+    int left, top;
+
+    /* Check if there is a magic menu item associated with this item */
+    if (lpitem->text && IS_MAGIC_ITEM(lpitem->text))
+    {
+        UINT flags = 0;
+        RECT r;
+
+        switch(LOWORD(lpitem->text))
+        {
+        case HBMMENU_SYSTEM:
+            if (lpitem->dwItemData)
+            {
+                bmp = (HBITMAP)lpitem->dwItemData;
+                if (!GetObjectA( bmp, sizeof(bm), &bm )) return;
+            }
+            else
+            {
+                bmp = hBmpSysMenu;
+                if (!GetObjectA( bmp, sizeof(bm), &bm )) return;
+                /* only use right half of the bitmap */
+                bmp_xoffset = bm.bmWidth / 2;
+                bm.bmWidth -= bmp_xoffset;
+            }
+            goto got_bitmap;
+        case HBMMENU_MBAR_RESTORE:
+            flags = DFCS_CAPTIONRESTORE;
+            break;
+        case HBMMENU_MBAR_MINIMIZE:
+            flags = DFCS_CAPTIONMIN;
+            break;
+        case HBMMENU_MBAR_MINIMIZE_D:
+            flags = DFCS_CAPTIONMIN | DFCS_INACTIVE;
+            break;
+        case HBMMENU_MBAR_CLOSE:
+            flags = DFCS_CAPTIONCLOSE;
+            break;
+        case HBMMENU_MBAR_CLOSE_D:
+            flags = DFCS_CAPTIONCLOSE | DFCS_INACTIVE;
+            break;
+        case HBMMENU_CALLBACK:
+        case HBMMENU_POPUP_CLOSE:
+        case HBMMENU_POPUP_RESTORE:
+        case HBMMENU_POPUP_MAXIMIZE:
+        case HBMMENU_POPUP_MINIMIZE:
+        default:
+            FIXME("Magic 0x%08x not implemented\n", LOWORD(lpitem->text));
+            return;
+        }
+        r = *rect;
+        InflateRect( &r, -1, -1 );
+        if (lpitem->fState & MF_HILITE) flags |= DFCS_PUSHED;
+        DrawFrameControl( hdc, &r, DFC_CAPTION, flags );
+        return;
     }
 
+    if (!bmp || !GetObjectA( bmp, sizeof(bm), &bm )) return;
+
+ got_bitmap:
+    hdcMem = CreateCompatibleDC( hdc );
+    SelectObject( hdcMem, bmp );
+
+    /* handle fontsize > bitmap_height */
+    top = (h>bm.bmHeight) ? rect->top+(h-bm.bmHeight)/2 : rect->top;
+    left=rect->left;
+    if (TWEAK_WineLook == WIN95_LOOK) {
+        rop=((lpitem->fState & MF_HILITE) && !IS_MAGIC_ITEM(lpitem->text)) ? NOTSRCCOPY : SRCCOPY;
+        if ((lpitem->fState & MF_HILITE) && IS_BITMAP_ITEM(lpitem->fType))
+            SetBkColor(hdc, GetSysColor(COLOR_HIGHLIGHT));
+    } else {
+        left++;
+        w-=2;
+        rop=((lpitem->fState & MF_HILITE) && !IS_MAGIC_ITEM(lpitem->text) && (!menuBar)) ? MERGEPAINT : SRCCOPY;
+    }
+    BitBlt( hdc, left, top, w, h, hdcMem, bmp_xoffset, 0, rop );
+    DeleteDC( hdcMem );
 }
 
+
 /***********************************************************************
  *           MENU_CalcItemSize
  *
@@ -812,28 +902,16 @@
 
     if (IS_BITMAP_ITEM(lpitem->fType))
     {
-	BITMAP bm;
-	HBITMAP resBmp = 0;
+        SIZE size;
 
-	/* Check if there is a magic menu item associated with this item */
-	if (IS_MAGIC_ITEM(lpitem->text))
-	{
-	    resBmp = MENU_LoadMagicItem((int)lpitem->text, (lpitem->fType & MF_HILITE),
-					lpitem->dwItemData);
-        }
-        else
-            resBmp = (HBITMAP)lpitem->text;
-
-        if (GetObjectA(resBmp, sizeof(bm), &bm ))
+        MENU_GetBitmapItemSize( (int)lpitem->text, lpitem->dwItemData, &size );
+        lpitem->rect.right  += size.cx;
+        lpitem->rect.bottom += size.cy;
+        if (TWEAK_WineLook == WIN98_LOOK)
         {
-            lpitem->rect.right  += bm.bmWidth;
-            lpitem->rect.bottom += bm.bmHeight;
-            if (TWEAK_WineLook == WIN98_LOOK) {
-                /* Leave space for the sunken border */
-                lpitem->rect.right  += 2;
-                lpitem->rect.bottom += 2;
-            }
-
+            /* Leave space for the sunken border */
+            lpitem->rect.right  += 2;
+            lpitem->rect.bottom += 2;
         }
     }
     
@@ -1259,53 +1337,7 @@
     /* Draw the item text or bitmap */
     if (IS_BITMAP_ITEM(lpitem->fType))
     {
-        int left,top,w,h;
-        DWORD rop;
-
-        HBITMAP resBmp = 0;
-
-        HDC hdcMem = CreateCompatibleDC( hdc );
-
-        /*
-         * Check if there is a magic menu item associated with this item
-         * and load the appropriate bitmap
-         */
-	if (IS_MAGIC_ITEM(lpitem->text))
-	{
-	    resBmp = MENU_LoadMagicItem((int)lpitem->text, (lpitem->fState & MF_HILITE),
-					lpitem->dwItemData);
-        }
-        else
-            resBmp = (HBITMAP)lpitem->text;
-
-	if (resBmp)
-	{
-	    BITMAP bm;
-	    GetObjectA( resBmp, sizeof(bm), &bm );
-	
-	    SelectObject(hdcMem,resBmp );
-	
-	    /* handle fontsize > bitmap_height */
-            h=rect.bottom - rect.top;
-	    top = (h>bm.bmHeight) ? 
-		rect.top+(h-bm.bmHeight)/2 : rect.top;
-            w=rect.right - rect.left;
-            left=rect.left;
-            if (TWEAK_WineLook == WIN95_LOOK) {
-                rop=((lpitem->fState & MF_HILITE) && !IS_MAGIC_ITEM(lpitem->text)) ? NOTSRCCOPY : SRCCOPY;
-                if ((lpitem->fState & MF_HILITE) && IS_BITMAP_ITEM(lpitem->fType))
-                    SetBkColor(hdc, GetSysColor(COLOR_HIGHLIGHT));
-            } else {
-                left++;
-                w-=2;
-                rop=((lpitem->fState & MF_HILITE) && !IS_MAGIC_ITEM(lpitem->text) && (!menuBar)) ? MERGEPAINT : SRCCOPY;
-            }
-	    BitBlt( hdc, left, top, w,
-		  h, hdcMem, 0, 0,
-		   rop);
-	}
-	DeleteDC( hdcMem );
-
+        MENU_DrawBitmapItem( hdc, lpitem, &rect, menuBar );
 	return;
 
     }
diff --git a/dlls/user/resources/user32_bitmaps.rc b/dlls/user/resources/user32_bitmaps.rc
index 60f7172..2871325 100644
--- a/dlls/user/resources/user32_bitmaps.rc
+++ b/dlls/user/resources/user32_bitmaps.rc
@@ -254,6 +254,126 @@
  '00 00'
 }
 
+/* BINRES obm_restored.bmp */
+OBM_RESTORED BITMAP
+{
+ '42 4D E6 00 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 10 00 00 00 0E 00 00 00 01 00 04 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 BF BF BF 00 D9 D9'
+ 'D9 00 7F 7F 7F 00 FF FF FF 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 44 44 44 44 44 44 44 44 02 22'
+ '22 22 22 22 22 24 03 11 00 00 00 11 11 24 03 11'
+ '01 11 10 11 11 24 03 11 01 11 10 11 11 24 03 11'
+ '01 11 10 00 11 24 03 11 00 00 00 10 11 24 03 11'
+ '00 00 00 10 11 24 03 11 11 01 11 10 11 24 03 11'
+ '11 00 00 00 11 24 03 11 11 00 00 00 11 24 03 11'
+ '11 11 11 11 11 24 03 33 33 33 33 33 33 24 00 00'
+ '00 00 00 00 00 04'
+}
+
+/* BINRES obm_zoomd.bmp */
+OBM_ZOOMD BITMAP
+{
+ '42 4D E6 00 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 10 00 00 00 0E 00 00 00 01 00 04 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 BF BF BF 00 D9 D9'
+ 'D9 00 7F 7F 7F 00 FF FF FF 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 44 44 44 44 44 44 44 44 02 22'
+ '22 22 22 22 22 24 03 11 00 00 00 00 01 24 03 11'
+ '01 11 11 11 01 24 03 11 01 11 11 11 01 24 03 11'
+ '01 11 11 11 01 24 03 11 01 11 11 11 01 24 03 11'
+ '01 11 11 11 01 24 03 11 01 11 11 11 01 24 03 11'
+ '00 00 00 00 01 24 03 11 00 00 00 00 01 24 03 11'
+ '11 11 11 11 11 24 03 33 33 33 33 33 33 24 00 00'
+ '00 00 00 00 00 00'
+}
+
+/* BINRES obm_reduced.bmp */
+OBM_REDUCED BITMAP
+{
+ '42 4D E6 00 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 10 00 00 00 0E 00 00 00 01 00 04 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 BF BF BF 00 D9 D9'
+ 'D9 00 7F 7F 7F 00 FF FF FF 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 44 44 44 44 44 44 44 44 02 22'
+ '22 22 22 22 22 24 03 11 10 00 00 01 11 24 03 11'
+ '10 00 00 01 11 24 03 11 11 11 11 11 11 24 03 11'
+ '11 11 11 11 11 24 03 11 11 11 11 11 11 24 03 11'
+ '11 11 11 11 11 24 03 11 11 11 11 11 11 24 03 11'
+ '11 11 11 11 11 24 03 11 11 11 11 11 11 24 03 11'
+ '11 11 11 11 11 24 03 33 33 33 33 33 33 24 00 00'
+ '00 00 00 00 00 00'
+}
+
+/* BINRES obm_restore.bmp */
+OBM_RESTORE BITMAP
+{
+ '42 4D E6 00 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 10 00 00 00 0E 00 00 00 01 00 04 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 BF BF BF 00 D9 D9'
+ 'D9 00 7F 7F 7F 00 FF FF FF 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 33'
+ '33 33 33 33 33 30 42 11 11 11 11 11 11 30 42 10'
+ '00 00 01 11 11 30 42 10 11 11 01 11 11 30 42 10'
+ '11 11 01 11 11 30 42 10 11 11 00 01 11 30 42 10'
+ '00 00 01 01 11 30 42 10 00 00 01 01 11 30 42 11'
+ '10 11 11 01 11 30 42 11 10 00 00 01 11 30 42 11'
+ '10 00 00 01 11 30 42 22 22 22 22 22 22 30 44 44'
+ '44 44 44 44 44 40'
+}
+
+/* BINRES obm_zoom.bmp */
+OBM_ZOOM BITMAP
+{
+ '42 4D E6 00 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 10 00 00 00 0E 00 00 00 01 00 04 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 BF BF BF 00 D9 D9'
+ 'D9 00 7F 7F 7F 00 FF FF FF 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 33'
+ '33 33 33 33 33 30 42 11 11 11 11 11 11 30 42 10'
+ '00 00 00 00 11 30 42 10 11 11 11 10 11 30 42 10'
+ '11 11 11 10 11 30 42 10 11 11 11 10 11 30 42 10'
+ '11 11 11 10 11 30 42 10 11 11 11 10 11 30 42 10'
+ '11 11 11 10 11 30 42 10 00 00 00 00 11 30 42 10'
+ '00 00 00 00 11 30 42 22 22 22 22 22 22 30 44 44'
+ '44 44 44 44 44 40'
+}
+
+/* BINRES obm_reduce.bmp */
+OBM_REDUCE BITMAP
+{
+ '42 4D E6 00 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 10 00 00 00 0E 00 00 00 01 00 04 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 BF BF BF 00 D9 D9'
+ 'D9 00 7F 7F 7F 00 FF FF FF 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 33'
+ '33 33 33 33 33 30 42 11 11 11 11 11 11 30 42 11'
+ '00 00 00 11 11 30 42 11 00 00 00 11 11 30 42 11'
+ '11 11 11 11 11 30 42 11 11 11 11 11 11 30 42 11'
+ '11 11 11 11 11 30 42 11 11 11 11 11 11 30 42 11'
+ '11 11 11 11 11 30 42 11 11 11 11 11 11 30 42 11'
+ '11 11 11 11 11 30 42 22 22 22 22 22 22 30 44 44'
+ '44 44 44 44 44 40'
+}
+
 /* BINRES obm_lfarrow.bmp */
 OBM_LFARROW BITMAP
 {
@@ -358,6 +478,41 @@
  '00 00'
 }
 
+/* BINRES obm_close.bmp */
+OBM_CLOSE BITMAP
+{
+ '42 4D DE 01 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 24 00 00 00 12 00 00 00 01 00 04 00 00 00'
+ '00 00 68 01 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80'
+ '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80'
+ '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF'
+ '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+ '00 00 FF FF FF 00 88 88 88 88 88 88 88 88 88 88'
+ '88 88 88 88 88 88 88 88 00 00 88 88 88 70 07 88'
+ '88 88 88 88 88 88 70 07 88 88 88 88 00 00 88 88'
+ '80 00 78 88 88 88 88 88 88 80 00 78 88 88 88 88'
+ '00 00 88 87 00 00 88 88 88 88 88 88 87 00 00 88'
+ '88 88 88 88 00 00 88 88 88 70 88 88 88 88 88 88'
+ '88 88 70 88 88 88 88 88 00 00 88 88 88 80 78 88'
+ '88 88 88 88 88 88 80 78 88 88 88 88 00 00 88 88'
+ '88 80 08 88 88 88 88 88 88 88 80 08 88 88 88 88'
+ '00 00 88 88 88 80 10 88 88 88 88 88 88 88 80 10'
+ '88 88 88 88 00 00 88 88 88 80 91 08 88 88 88 88'
+ '88 88 80 91 08 88 88 88 00 00 88 88 88 80 19 10'
+ '88 88 88 88 88 88 80 19 10 88 88 88 00 00 88 88'
+ '88 80 91 90 78 88 88 88 88 88 80 91 90 78 88 88'
+ '00 00 88 88 88 80 19 19 08 88 88 88 88 88 80 19'
+ '19 08 88 88 00 00 88 88 88 80 91 91 07 88 88 88'
+ '88 88 80 91 91 07 88 88 00 00 88 88 88 87 0F 89'
+ '10 88 88 88 88 88 87 0F 89 10 88 88 00 00 88 88'
+ '88 88 08 F8 F0 88 88 88 88 88 88 08 F8 F0 88 88'
+ '00 00 88 88 88 88 0F 8F 08 88 88 88 88 88 88 0F'
+ '8F 08 88 88 00 00 88 88 88 88 70 00 88 88 88 88'
+ '88 88 88 70 00 88 88 88 00 00 88 88 88 88 88 88'
+ '88 88 88 88 88 88 88 88 88 88 88 88 00 00'
+}
+
 /* BINRES obm_old_restore.bmp */
 OBM_OLD_RESTORE BITMAP
 {
@@ -536,18 +691,34 @@
 /* BINRES obm_old_close.bmp */
 OBM_OLD_CLOSE BITMAP
 {
- '42 4D D6 00 00 00 00 00 00 00 3E 00 00 00 28 00'
- '00 00 32 00 00 00 13 00 00 00 01 00 01 00 00 00'
- '00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
- '00 00 00 00 00 00 00 00 00 00 FF FF FF 00 FF FF'
- 'FF FF FF FF C0 00 FF FF FF FF FF FF C0 00 FF FF'
- 'FF FF FF FF C0 00 FF FF FF FF FF FF C0 00 FF FF'
- 'FF FF FF FF C0 00 FF FF FF FF FF FF C0 00 FF FF'
- 'FF FF FF FF C0 00 E0 00 01 FF C0 0F C0 00 C0 00'
- '01 FF 80 0F C0 00 DF FF F9 FF BF CF C0 00 DF FF'
- 'F9 FF BF CF C0 00 C0 00 03 FF 80 1F C0 00 FF FF'
- 'FF FF FF FF C0 00 FF FF FF FF FF FF C0 00 FF FF'
- 'FF FF FF FF C0 00 FF FF FF FF FF FF C0 00 FF FF'
- 'FF FF FF FF C0 00 FF FF FF FF FF FF C0 00 FF FF'
- 'FF FF FF FF C0 00'
+ '42 4D DE 01 00 00 00 00 00 00 76 00 00 00 28 00'
+ '00 00 24 00 00 00 12 00 00 00 01 00 04 00 00 00'
+ '00 00 68 01 00 00 00 00 00 00 00 00 00 00 00 00'
+ '00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80'
+ '00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80'
+ '00 00 80 80 80 00 C0 C0 C0 00 00 00 FF 00 00 FF'
+ '00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
+ '00 00 FF FF FF 00 88 88 88 88 88 88 88 88 88 88'
+ '88 88 88 88 88 88 88 88 00 00 88 88 88 88 88 88'
+ '88 88 88 88 88 88 88 88 88 88 88 88 00 00 88 88'
+ '88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88'
+ '00 00 88 88 88 88 88 88 88 88 88 88 88 88 88 88'
+ '88 88 88 88 00 00 88 88 88 88 88 88 88 88 88 88'
+ '88 88 88 88 88 88 88 88 00 00 88 88 88 88 88 88'
+ '88 88 88 88 88 88 88 88 88 88 88 88 00 00 88 88'
+ '88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88'
+ '00 00 88 87 77 77 77 77 77 77 88 88 88 88 87 77'
+ '77 77 88 88 00 00 88 00 00 00 00 00 00 07 88 88'
+ '88 88 00 00 00 07 88 88 00 00 88 0F FF FF FF FF'
+ 'FF 07 88 88 88 88 0F FF FF 07 88 88 00 00 88 00'
+ '00 00 00 00 00 08 88 88 88 88 00 00 00 08 88 88'
+ '00 00 88 88 88 88 88 88 88 88 88 88 88 88 88 88'
+ '88 88 88 88 00 00 88 88 88 88 88 88 88 88 88 88'
+ '88 88 88 88 88 88 88 88 00 00 88 88 88 88 88 88'
+ '88 88 88 88 88 88 88 88 88 88 88 88 00 00 88 88'
+ '88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88'
+ '00 00 88 88 88 88 88 88 88 88 88 88 88 88 88 88'
+ '88 88 88 88 00 00 88 88 88 88 88 88 88 88 88 88'
+ '88 88 88 88 88 88 88 88 00 00 88 88 88 88 88 88'
+ '88 88 88 88 88 88 88 88 88 88 88 88 00 00'
 }
diff --git a/windows/cursoricon.c b/windows/cursoricon.c
index 35391ff..812f428 100644
--- a/windows/cursoricon.c
+++ b/windows/cursoricon.c
@@ -2115,7 +2115,6 @@
       {
           /* OEM bitmap: try to load the resource from user32.dll */
           if (HIWORD(name)) return 0;
-          if ((hbitmap = USER_Driver.pLoadOEMResource( LOWORD(name), OEM_BITMAP ))) return hbitmap;
           if (!(instance = GetModuleHandleA("user32.dll"))) return 0;
       }
       if (!(hRsrc = FindResourceW( instance, name, RT_BITMAPW ))) return 0;
diff --git a/windows/mdi.c b/windows/mdi.c
index ba54a2b..cb11a5f 100644
--- a/windows/mdi.c
+++ b/windows/mdi.c
@@ -117,7 +117,6 @@
 } MDICLIENTINFO;
 
 static HBITMAP hBmpClose   = 0;
-static HBITMAP hBmpRestore = 0;
 
 /* ----------------- declarations ----------------- */
 static void MDI_UpdateFrameText( HWND, HWND, BOOL, LPCWSTR);
@@ -816,7 +815,7 @@
 {
  HDC 		hDCSrc  = CreateCompatibleDC(0);
  HDC		hDCDest	= CreateCompatibleDC(hDCSrc);
- HBITMAP	hbClose = LoadBitmapW(0, MAKEINTRESOURCEW(OBM_CLOSE) );
+ HBITMAP	hbClose = LoadBitmapW(0, MAKEINTRESOURCEW(OBM_OLD_CLOSE) );
  HBITMAP	hbCopy;
  HBITMAP	hobjSrc, hobjDest;
 
@@ -1243,11 +1242,7 @@
 	ci->mdiFlags		= 0;
         SetWindowLongW( hwnd, GWL_STYLE, GetWindowLongW(hwnd,GWL_STYLE) | WS_CLIPCHILDREN );
 
-	if (!hBmpClose)
-        {
-            hBmpClose = CreateMDIMenuBitmap();
-            hBmpRestore = LoadBitmapW( 0, MAKEINTRESOURCEW(OBM_RESTORE) );
-        }
+	if (!hBmpClose) hBmpClose = CreateMDIMenuBitmap();
 
 	if (ci->hWindowMenu != 0)
 	    AppendMenuW( ci->hWindowMenu, MF_SEPARATOR, 0, NULL );
diff --git a/windows/nonclient.c b/windows/nonclient.c
index 36bcc8f..1da7c36 100644
--- a/windows/nonclient.c
+++ b/windows/nonclient.c
@@ -27,12 +27,6 @@
 BOOL NC_DrawGrayButton(HDC hdc, int x, int y);
 
 static HBITMAP hbitmapClose;
-static HBITMAP hbitmapMinimize;
-static HBITMAP hbitmapMinimizeD;
-static HBITMAP hbitmapMaximize;
-static HBITMAP hbitmapMaximizeD;
-static HBITMAP hbitmapRestore;
-static HBITMAP hbitmapRestoreD;
 
 static const BYTE lpGrayMask[] = { 0xAA, 0xA0,
 		      0x55, 0x50,  
@@ -871,18 +865,15 @@
 static void NC_DrawMaxButton( HWND hwnd, HDC16 hdc, BOOL down )
 {
     RECT rect;
-    HDC hdcMem;
+    UINT flags = IsZoomed(hwnd) ? DFCS_CAPTIONRESTORE : DFCS_CAPTIONMAX;
 
     NC_GetInsideRect( hwnd, &rect );
-    hdcMem = CreateCompatibleDC( hdc );
-    SelectObject( hdcMem,  (IsZoomed(hwnd)
-                            ? (down ? hbitmapRestoreD : hbitmapRestore)
-                            : (down ? hbitmapMaximizeD : hbitmapMaximize)) );
-    BitBlt( hdc, rect.right - GetSystemMetrics(SM_CXSIZE) - 1, rect.top,
-            GetSystemMetrics(SM_CXSIZE) + 1, GetSystemMetrics(SM_CYSIZE), hdcMem, 0, 0,
-            SRCCOPY );
-    DeleteDC( hdcMem );
-
+    rect.left = rect.right - GetSystemMetrics(SM_CXSIZE) + 1;
+    rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE) - 1;
+    rect.top += 1;
+    rect.right -= 1;
+    if (down) flags |= DFCS_PUSHED;
+    DrawFrameControl( hdc, &rect, DFC_CAPTION, flags );
 }
 
 
@@ -892,17 +883,18 @@
 static void NC_DrawMinButton( HWND hwnd, HDC16 hdc, BOOL down )
 {
     RECT rect;
-    HDC hdcMem;
+    UINT flags = DFCS_CAPTIONMIN;
+    DWORD style = GetWindowLongA( hwnd, GWL_STYLE );
 
     NC_GetInsideRect( hwnd, &rect );
-    hdcMem = CreateCompatibleDC( hdc );
-    SelectObject( hdcMem, (down ? hbitmapMinimizeD : hbitmapMinimize) );
-    if (GetWindowLongA(hwnd,GWL_STYLE) & WS_MAXIMIZEBOX)
-        rect.right -= GetSystemMetrics(SM_CXSIZE)+1;
-    BitBlt( hdc, rect.right - GetSystemMetrics(SM_CXSIZE) - 1, rect.top,
-            GetSystemMetrics(SM_CXSIZE) + 1, GetSystemMetrics(SM_CYSIZE), hdcMem, 0, 0,
-            SRCCOPY );
-    DeleteDC( hdcMem );
+    if (style & (WS_MAXIMIZEBOX|WS_MINIMIZEBOX))
+        rect.right -= GetSystemMetrics(SM_CXSIZE) - 2;
+    rect.left = rect.right - GetSystemMetrics(SM_CXSIZE) + 1;
+    rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE) - 1;
+    rect.top += 1;
+    rect.right -= 1;
+    if (down) flags |= DFCS_PUSHED;
+    DrawFrameControl( hdc, &rect, DFC_CAPTION, flags );
 }
 
 
@@ -1226,13 +1218,7 @@
 
     if (!hbitmapClose)
     {
-	if (!(hbitmapClose = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_CLOSE) ))) return;
-	hbitmapMinimize  = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_REDUCE) );
-	hbitmapMinimizeD = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_REDUCED) );
-	hbitmapMaximize  = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_ZOOM) );
-	hbitmapMaximizeD = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_ZOOMD) );
-	hbitmapRestore   = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_RESTORE) );
-	hbitmapRestoreD  = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_RESTORED) );
+	if (!(hbitmapClose = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_OLD_CLOSE) ))) return;
     }
     
     if (GetWindowLongA( hwnd, GWL_EXSTYLE) & WS_EX_DLGMODALFRAME)
@@ -1255,6 +1241,7 @@
 	MoveToEx( hdc, r.left - 1, r.top, NULL );
 	LineTo( hdc, r.left - 1, r.bottom );
     }
+    FillRect( hdc, &r, GetSysColorBrush(active ? COLOR_ACTIVECAPTION : COLOR_INACTIVECAPTION) );
     if (style & WS_MAXIMIZEBOX)
     {
 	NC_DrawMaxButton( hwnd, hdc, FALSE );
@@ -1266,9 +1253,6 @@
 	r.right -= GetSystemMetrics(SM_CXSIZE) + 1;
     }
 
-    FillRect( hdc, &r, GetSysColorBrush(active ? COLOR_ACTIVECAPTION :
-					    COLOR_INACTIVECAPTION) );
-
     if (GetWindowTextA( hwnd, buffer, sizeof(buffer) ))
     {
 	if (active) SetTextColor( hdc, GetSysColor( COLOR_CAPTIONTEXT ) );