- Merge changes to MDI_AugmentFrameMenu from Wine (fixes part of bug #606). - Fix deleting of bitmap in MDI_RestoreFrameMenu. Modified: trunk/reactos/lib/user32/windows/mdi.c _____
Modified: trunk/reactos/lib/user32/windows/mdi.c --- trunk/reactos/lib/user32/windows/mdi.c 2005-05-01 06:38:51 UTC (rev 14895) +++ trunk/reactos/lib/user32/windows/mdi.c 2005-05-01 07:05:13 UTC (rev 14896) @@ -1066,31 +1066,24 @@
static BOOL MDI_AugmentFrameMenu( HWND frame, HWND hChild ) { HMENU menu = GetMenu( frame ); -#ifndef __REACTOS__ - WND* child = WIN_FindWndPtr(hChild); -#endif HMENU hSysPopup = 0; HBITMAP hSysMenuBitmap = 0; + INT nItems; + UINT iId; + HICON hIcon;
TRACE("frame %p,child %p\n",frame,hChild);
-#ifndef __REACTOS__ - if( !menu || !child->hSysMenu ) - { - WIN_ReleaseWndPtr(child); + if( !menu ) return 0; + + /* if the system buttons already exist do not add them again */ + nItems = GetMenuItemCount(menu) - 1; + iId = GetMenuItemID(menu,nItems) ; + if (iId == SC_RESTORE || iId == SC_CLOSE) return 0; - } - WIN_ReleaseWndPtr(child); -#else - if( !menu || !GetSystemMenu(hChild, FALSE) ) - { - return 0; - } -#endif
/* create a copy of sysmenu popup and insert it into frame menu bar */ - - if (!(hSysPopup = LoadMenuA(GetModuleHandleA("USER32"), "SYSMENU"))) + if (!(hSysPopup = GetSystemMenu(hChild, FALSE))) return 0;
AppendMenuA(menu,MF_HELP | MF_BITMAP, @@ -1098,14 +1091,15 @@ AppendMenuA(menu,MF_HELP | MF_BITMAP, SC_RESTORE, (LPSTR)(DWORD)HBMMENU_MBAR_RESTORE );
- /* In Win 95 look, the system menu is replaced by the child icon */ -#ifndef __REACTOS__ - if(TWEAK_WineLook > WIN31_LOOK) -#endif - { - HICON hIcon = (HICON)GetClassLongA(hChild, GCL_HICONSM); + AppendMenuA(menu,MF_HELP | MF_BITMAP, + SC_CLOSE, (LPSTR)(DWORD)HBMMENU_MBAR_CLOSE ); + + /* The system menu is replaced by the child icon */ + hIcon = (HICON)GetClassLongW(hChild, GCL_HICONSM); if (!hIcon) - hIcon = (HICON)GetClassLongA(hChild, GCL_HICON); + hIcon = (HICON)GetClassLongW(hChild, GCL_HICON); + if (!hIcon) + hIcon = LoadImageW(0, MAKEINTRESOURCEW(IDI_WINLOGO), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR); if (hIcon) { HDC hMemDC; @@ -1131,14 +1125,8 @@ hSysMenuBitmap = hBitmap; } } - } -#ifndef __REACTOS__ - else - hSysMenuBitmap = hBmpClose; -#endif
- if( hSysMenuBitmap != NULL && - !InsertMenuA(menu,0,MF_BYPOSITION | MF_BITMAP | MF_POPUP, + if( !InsertMenuA(menu,0,MF_BYPOSITION | MF_BITMAP | MF_POPUP, (UINT_PTR)hSysPopup, (LPSTR)hSysMenuBitmap)) { TRACE("not inserted\n"); @@ -1146,15 +1134,6 @@ return 0; }
- /* The close button is only present in Win 95 look */ -#ifndef __REACTOS__ - if(TWEAK_WineLook > WIN31_LOOK) -#endif - { - AppendMenuA(menu,MF_HELP | MF_BITMAP, - SC_CLOSE, (LPSTR)(DWORD)HBMMENU_MBAR_CLOSE ); - } - EnableMenuItem(hSysPopup, SC_SIZE, MF_BYCOMMAND | MF_GRAYED); EnableMenuItem(hSysPopup, SC_MOVE, MF_BYCOMMAND | MF_GRAYED); EnableMenuItem(hSysPopup, SC_MAXIMIZE, MF_BYCOMMAND | MF_GRAYED); @@ -1187,7 +1166,7 @@ */ memset(&menuInfo, 0, sizeof(menuInfo)); menuInfo.cbSize = sizeof(menuInfo); - menuInfo.fMask = MIIM_DATA | MIIM_TYPE; + menuInfo.fMask = MIIM_DATA | MIIM_TYPE | MIIM_BITMAP;
GetMenuItemInfoW(menu, 0, @@ -1196,28 +1175,11 @@
RemoveMenu(menu,0,MF_BYPOSITION);
-#ifndef __REACTOS__ - if ( (menuInfo.fType & MFT_BITMAP) && - (LOWORD(menuInfo.dwTypeData)!=0) && - (LOWORD(menuInfo.dwTypeData)!=HBITMAP_16(hBmpClose)) ) - { - DeleteObject(HBITMAP_32(LOWORD(menuInfo.dwTypeData))); - } -#else - if ( (menuInfo.fType & MFT_BITMAP) && - (LOWORD(menuInfo.dwTypeData)!=0)) - { - DeleteObject((HBITMAP)(LOWORD(menuInfo.dwTypeData) & 0x50000)); - } -#endif + if ( menuInfo.hbmpItem != 0 ) + DeleteObject(menuInfo.hbmpItem);
-#ifndef __REACTOS__ - if(TWEAK_WineLook > WIN31_LOOK) -#endif - { - /* close */ - DeleteMenu(menu,GetMenuItemCount(menu) - 1,MF_BYPOSITION); - } + /* close */ + DeleteMenu(menu,GetMenuItemCount(menu) - 1,MF_BYPOSITION); /* restore */ DeleteMenu(menu,GetMenuItemCount(menu) - 1,MF_BYPOSITION); /* minimize */