MDIchild created when the MDI client has the MDIS_ALLCHILDSTYLES style, should not be shown at creation nor activated unless the WS_VISIBLE flag is set.
diff --git a/windows/mdi.c b/windows/mdi.c index a618f7e..022d6b4 100644 --- a/windows/mdi.c +++ b/windows/mdi.c
@@ -356,18 +356,33 @@ ShowWindow32( hwnd, SW_SHOWMINNOACTIVE ); else { - SetWindowPos32( hwnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE ); + /* WS_VISIBLE is clear if a) the MDI client has + * MDIS_ALLCHILDSTYLES style and 2) the flag is cleared in the + * MDICreateStruct. If so the created window is not shown nor + * activated. + */ + int showflag=wnd->dwStyle & WS_VISIBLE; + /* clear visible flag, otherwise SetWindoPos32 ignores + * the SWP_SHOWWINDOW command. + */ + wnd->dwStyle &= ~WS_VISIBLE; + if(showflag){ + SetWindowPos32( hwnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE ); - /* Set maximized state here in case hwnd didn't receive WM_SIZE - * during CreateWindow - bad! - */ + /* Set maximized state here in case hwnd didn't receive WM_SIZE + * during CreateWindow - bad! + */ - if((wnd->dwStyle & WS_MAXIMIZE) && !ci->hwndChildMaximized ) - { - ci->hwndChildMaximized = wnd->hwndSelf; - MDI_AugmentFrameMenu( ci, w->parent, hwnd ); - MDI_UpdateFrameText( w->parent, ci->self, MDI_REPAINTFRAME, NULL ); - } + if((wnd->dwStyle & WS_MAXIMIZE) && !ci->hwndChildMaximized ) + { + ci->hwndChildMaximized = wnd->hwndSelf; + MDI_AugmentFrameMenu( ci, w->parent, hwnd ); + MDI_UpdateFrameText( w->parent, ci->self, MDI_REPAINTFRAME, NULL ); + } + }else + /* needed, harmless ? */ + SetWindowPos32( hwnd, 0, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE ); + } TRACE(mdi, "created child - %04x\n",hwnd); }