The system menu icon on a MDI child window was corrupted when the
child frame window is maximized within the main frame when the wine
look is Windows 95.
diff --git a/windows/mdi.c b/windows/mdi.c
index 74dbd1e..dc603bc 100644
--- a/windows/mdi.c
+++ b/windows/mdi.c
@@ -808,6 +808,7 @@
{
WND* child = WIN_FindWndPtr(hChild);
HMENU hSysPopup = 0;
+ HBITMAP hSysMenuBitmap = 0;
TRACE(mdi,"frame %p,child %04x\n",frame,hChild);
@@ -831,8 +832,44 @@
AppendMenuA(frame->wIDmenu,MF_HELP | MF_BITMAP,
SC_RESTORE, (LPSTR)(DWORD)HBMMENU_MBAR_RESTORE );
+ /* In Win 95 look, the system menu is replaced by the child icon */
+
+ if(TWEAK_WineLook > WIN31_LOOK)
+ {
+ HICON hIcon = GetClassLongA(hChild, GCL_HICONSM);
+ if (!hIcon)
+ hIcon = GetClassLongA(hChild, GCL_HICON);
+ if (hIcon)
+ {
+ HDC hMemDC;
+ HBITMAP hBitmap, hOldBitmap;
+ HBRUSH hBrush;
+ HDC hdc = GetDC(hChild);
+
+ if (hdc)
+ {
+ int cx, cy;
+ cx = GetSystemMetrics(SM_CXSMICON);
+ cy = GetSystemMetrics(SM_CYSMICON);
+ hMemDC = CreateCompatibleDC(hdc);
+ hBitmap = CreateCompatibleBitmap(hdc, cx, cy);
+ hOldBitmap = SelectObject(hMemDC, hBitmap);
+ SetMapMode(hMemDC, MM_TEXT);
+ hBrush = CreateSolidBrush(GetSysColor(COLOR_MENU));
+ DrawIconEx(hMemDC, 0, 0, hIcon, cx, cy, 0, hBrush, DI_NORMAL);
+ SelectObject (hMemDC, hOldBitmap);
+ DeleteObject(hBrush);
+ DeleteDC(hMemDC);
+ ReleaseDC(hChild, hdc);
+ hSysMenuBitmap = hBitmap;
+ }
+ }
+ }
+ else
+ hSysMenuBitmap = hBmpClose;
+
if( !InsertMenuA(frame->wIDmenu,0,MF_BYPOSITION | MF_BITMAP | MF_POPUP,
- hSysPopup, (LPSTR)(DWORD)hBmpClose ))
+ hSysPopup, (LPSTR)(DWORD)hSysMenuBitmap))
{
TRACE(mdi,"not inserted\n");
DestroyMenu(hSysPopup);