diff --git a/controls/menu.c b/controls/menu.c index 2a0d2114093..3c1b9b35da1 100644 --- a/controls/menu.c +++ b/controls/menu.c @@ -146,15 +146,7 @@ typedef struct 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 @@ BOOL MENU_Init() /* 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 @@ static UINT MENU_FindItemByKey( HWND hwndOwner, HMENU hmenu, } 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 @@ static void MENU_CalcItemSize( HDC hdc, MENUITEM *lpitem, HWND hwndOwner, 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 @@ static void MENU_DrawMenuItem( HWND hwnd, HMENU hmenu, HWND hwndOwner, HDC hdc, /* 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 60f71725e9d..28713257274 100644 --- a/dlls/user/resources/user32_bitmaps.rc +++ b/dlls/user/resources/user32_bitmaps.rc @@ -254,6 +254,126 @@ OBM_UPARROWD BITMAP '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 @@ OBM_UPARROW BITMAP '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 @@ OBM_SIZE BITMAP /* 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 35391ff33d1..812f4288649 100644 --- a/windows/cursoricon.c +++ b/windows/cursoricon.c @@ -2115,7 +2115,6 @@ static HBITMAP BITMAP_Load( HINSTANCE instance,LPCWSTR name, UINT loadflags ) { /* 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 ba54a2bdb13..cb11a5fc1bc 100644 --- a/windows/mdi.c +++ b/windows/mdi.c @@ -117,7 +117,6 @@ typedef struct } MDICLIENTINFO; static HBITMAP hBmpClose = 0; -static HBITMAP hBmpRestore = 0; /* ----------------- declarations ----------------- */ static void MDI_UpdateFrameText( HWND, HWND, BOOL, LPCWSTR); @@ -816,7 +815,7 @@ static HBITMAP CreateMDIMenuBitmap(void) { 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 @@ static LRESULT MDIClientWndProc_common( HWND hwnd, UINT message, 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 36bcc8f0433..1da7c367179 100644 --- a/windows/nonclient.c +++ b/windows/nonclient.c @@ -27,12 +27,6 @@ DECLARE_DEBUG_CHANNEL(shell); 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 @@ void NC_DrawSysButton( HWND hwnd, HDC hdc, BOOL down ) 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_DrawMaxButton( HWND hwnd, HDC16 hdc, BOOL down ) 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 @@ static void NC_DrawCaption( HDC hdc, RECT *rect, HWND hwnd, 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 @@ static void NC_DrawCaption( HDC hdc, RECT *rect, HWND hwnd, 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 @@ static void NC_DrawCaption( HDC hdc, RECT *rect, HWND hwnd, 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 ) );