if (unicode)
{
- hwnd = CreateWindowExW(template.exStyle, template.className, template.caption,
- template.style & ~WS_VISIBLE,
- rect.left, rect.top, rect.right, rect.bottom,
- owner, hMenu, hInst, NULL );
+ hwnd = User32CreateWindowEx(template.exStyle, template.className, template.caption,
+ template.style & ~WS_VISIBLE,
+ rect.left, rect.top, rect.right, rect.bottom,
+ owner, hMenu, hInst, NULL,
+ TRUE);
}
else
{
caption = HeapAlloc( GetProcessHeap(), 0, len );
WideCharToMultiByte( CP_ACP, 0, template.caption, -1, caption, len, NULL, NULL );
}
- hwnd = CreateWindowExA(template.exStyle, class, caption,
- template.style & ~WS_VISIBLE,
- rect.left, rect.top, rect.right, rect.bottom,
- owner, hMenu, hInst, NULL );
+ hwnd = User32CreateWindowEx(template.exStyle, class, caption,
+ template.style & ~WS_VISIBLE,
+ rect.left, rect.top, rect.right, rect.bottom,
+ owner, hMenu, hInst, NULL,
+ FALSE);
if (HIWORD(class)) HeapFree( GetProcessHeap(), 0, class );
if (HIWORD(caption)) HeapFree( GetProcessHeap(), 0, caption );
}
WNDCLASSEXA wceA;
WNDCLASSEXW wceW;
HWND Handle;
- MDICREATESTRUCTA mdi;
#if 0
DbgPrint("[window] User32CreateWindowEx style %d, exstyle %d, parent %d\n", dwStyle, dwExStyle, hWndParent);
ControlsInitialized = ControlsInit(ClassName.Buffer);
}
- if (dwExStyle & WS_EX_MDICHILD)
- {
- POINT mPos[2];
- UINT id = 0;
- /* lpParams of WM_[NC]CREATE is different for MDI children.
- * MDICREATESTRUCT members have the originally passed values.
- *
- * Note: we rely on the fact that MDICREATESTRUCTA and MDICREATESTRUCTW
- * have the same layout.
- */
- mdi.szClass = (LPCSTR)lpClassName;
- mdi.szTitle = (LPCSTR)lpWindowName;
- mdi.hOwner = hInstance;
- mdi.x = x;
- mdi.y = y;
- mdi.cx = nWidth;
- mdi.cy = nHeight;
- mdi.style = dwStyle;
- mdi.lParam = (LPARAM)lpParam;
-
- lpParam = (LPVOID)&mdi;
-
- if (GetWindowLongW(hWndParent, GWL_STYLE) & MDIS_ALLCHILDSTYLES)
- {
- if (dwStyle & WS_POPUP)
- {
- DPRINT1("WS_POPUP with MDIS_ALLCHILDSTYLES is not allowed\n");
- return(0);
- }
- dwStyle |= (WS_CHILD | WS_CLIPSIBLINGS);
- }
- else
- {
- dwStyle &= ~WS_POPUP;
- dwStyle |= (WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION |
- WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX);
- }
-
- HWND top_child = GetWindow(hWndParent, GW_CHILD);
-
- if (top_child)
- {
- /* Restore current maximized child */
- if((dwStyle & WS_VISIBLE) && IsZoomed(top_child))
- {
- DPRINT("Restoring current maximized child %p\n", top_child);
- SendMessageW( top_child, WM_SETREDRAW, FALSE, 0 );
- ShowWindow(top_child, SW_RESTORE);
- SendMessageW( top_child, WM_SETREDRAW, TRUE, 0 );
- }
- }
-
- MDI_CalcDefaultChildPos(hWndParent, -1, mPos, 0, &id);
-
- if (!(dwStyle & WS_POPUP)) hMenu = (HMENU)id;
-
- if (dwStyle & (WS_CHILD | WS_POPUP))
- {
- if (x == CW_USEDEFAULT || x == CW_USEDEFAULT16)
- {
- x = mPos[0].x;
- y = mPos[0].y;
- }
- if (nWidth == CW_USEDEFAULT || nWidth == CW_USEDEFAULT16 || !nWidth)
- nWidth = mPos[1].x;
- if (nHeight == CW_USEDEFAULT || nHeight == CW_USEDEFAULT16 || !nHeight)
- nHeight = mPos[1].y;
- }
- }
-
if (Unicode)
RtlInitUnicodeString(&WindowName, (PCWSTR)lpWindowName);
else
{
wceW.cbSize = sizeof(WNDCLASSEXW);
if(GetClassInfoExW(hInstance, (LPCWSTR)lpClassName, &wceW) && wceW.lpszMenuName)
- {DbgPrint("LoadingMenu 0x%p %d\n", wceW.lpszMenuName, IS_INTRESOURCE(wceW.lpszMenuName));
- hMenu = LoadMenuW(hInstance, wceW.lpszMenuName);DbgPrint("Loaded menu: 0x%p\n", hMenu);
+ {
+ hMenu = LoadMenuW(hInstance, wceW.lpszMenuName);
}
}
else
DbgPrint("[window] NtUserCreateWindowEx() == %d\n", Handle);
#endif
- if ((dwStyle & WS_VISIBLE) && (dwExStyle & WS_EX_MDICHILD) && Handle != (HWND)0)
- {
- SendMessageW(hWndParent, WM_MDIREFRESHMENU, 0, 0);
- SetWindowPos(Handle, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW |
- SWP_NOMOVE | SWP_NOSIZE);
- }
-
if(!Unicode)
{
RtlFreeUnicodeString(&WindowName);
HINSTANCE hInstance,
LPVOID lpParam)
{
- return User32CreateWindowEx(dwExStyle,
- lpClassName,
- lpWindowName,
- dwStyle,
- x,
- y,
- nWidth,
- nHeight,
- hWndParent,
- hMenu,
- hInstance,
- lpParam,
- FALSE);
+ MDICREATESTRUCTA mdi;
+ HWND hwnd;
+
+ if (dwExStyle & WS_EX_MDICHILD)
+ {
+ POINT mPos[2];
+ UINT id = 0;
+
+ /* lpParams of WM_[NC]CREATE is different for MDI children.
+ * MDICREATESTRUCT members have the originally passed values.
+ */
+ mdi.szClass = lpClassName;
+ mdi.szTitle = lpWindowName;
+ mdi.hOwner = hInstance;
+ mdi.x = x;
+ mdi.y = y;
+ mdi.cx = nWidth;
+ mdi.cy = nHeight;
+ mdi.style = dwStyle;
+ mdi.lParam = (LPARAM)lpParam;
+
+ lpParam = (LPVOID)&mdi;
+
+ if (GetWindowLongW(hWndParent, GWL_STYLE) & MDIS_ALLCHILDSTYLES)
+ {
+ if (dwStyle & WS_POPUP)
+ {
+ DPRINT1("WS_POPUP with MDIS_ALLCHILDSTYLES is not allowed\n");
+ return(0);
+ }
+ dwStyle |= (WS_CHILD | WS_CLIPSIBLINGS);
+ }
+ else
+ {
+ dwStyle &= ~WS_POPUP;
+ dwStyle |= (WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION |
+ WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX);
+ }
+
+ HWND top_child = GetWindow(hWndParent, GW_CHILD);
+
+ if (top_child)
+ {
+ /* Restore current maximized child */
+ if((dwStyle & WS_VISIBLE) && IsZoomed(top_child))
+ {
+ DPRINT("Restoring current maximized child %p\n", top_child);
+ SendMessageW( top_child, WM_SETREDRAW, FALSE, 0 );
+ ShowWindow(top_child, SW_RESTORE);
+ SendMessageW( top_child, WM_SETREDRAW, TRUE, 0 );
+ }
+ }
+
+ MDI_CalcDefaultChildPos(hWndParent, -1, mPos, 0, &id);
+
+ if (!(dwStyle & WS_POPUP)) hMenu = (HMENU)id;
+
+ if (dwStyle & (WS_CHILD | WS_POPUP))
+ {
+ if (x == CW_USEDEFAULT || x == CW_USEDEFAULT16)
+ {
+ x = mPos[0].x;
+ y = mPos[0].y;
+ }
+ if (nWidth == CW_USEDEFAULT || nWidth == CW_USEDEFAULT16 || !nWidth)
+ nWidth = mPos[1].x;
+ if (nHeight == CW_USEDEFAULT || nHeight == CW_USEDEFAULT16 || !nHeight)
+ nHeight = mPos[1].y;
+ }
+ }
+
+ hwnd = User32CreateWindowEx(dwExStyle,
+ lpClassName,
+ lpWindowName,
+ dwStyle,
+ x,
+ y,
+ nWidth,
+ nHeight,
+ hWndParent,
+ hMenu,
+ hInstance,
+ lpParam,
+ FALSE);
+
+ if ((dwStyle & WS_VISIBLE) && (dwExStyle & WS_EX_MDICHILD) && hwnd != (HWND)0)
+ {
+ SendMessageW(hWndParent, WM_MDIREFRESHMENU, 0, 0);
+ SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
+ }
+
+ return hwnd;
}
HINSTANCE hInstance,
LPVOID lpParam)
{
- return User32CreateWindowEx(dwExStyle,
- (LPCSTR) lpClassName,
- (LPCSTR) lpWindowName,
- dwStyle,
- x,
- y,
- nWidth,
- nHeight,
- hWndParent,
- hMenu,
- hInstance,
- lpParam,
- TRUE);
+ MDICREATESTRUCTW mdi;
+ HWND hwnd;
+
+ if (dwExStyle & WS_EX_MDICHILD)
+ {
+ POINT mPos[2];
+ UINT id = 0;
+
+ /* lpParams of WM_[NC]CREATE is different for MDI children.
+ * MDICREATESTRUCT members have the originally passed values.
+ */
+ mdi.szClass = lpClassName;
+ mdi.szTitle = lpWindowName;
+ mdi.hOwner = hInstance;
+ mdi.x = x;
+ mdi.y = y;
+ mdi.cx = nWidth;
+ mdi.cy = nHeight;
+ mdi.style = dwStyle;
+ mdi.lParam = (LPARAM)lpParam;
+
+ lpParam = (LPVOID)&mdi;
+
+ if (GetWindowLongW(hWndParent, GWL_STYLE) & MDIS_ALLCHILDSTYLES)
+ {
+ if (dwStyle & WS_POPUP)
+ {
+ DPRINT1("WS_POPUP with MDIS_ALLCHILDSTYLES is not allowed\n");
+ return(0);
+ }
+ dwStyle |= (WS_CHILD | WS_CLIPSIBLINGS);
+ }
+ else
+ {
+ dwStyle &= ~WS_POPUP;
+ dwStyle |= (WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION |
+ WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX);
+ }
+
+ HWND top_child = GetWindow(hWndParent, GW_CHILD);
+
+ if (top_child)
+ {
+ /* Restore current maximized child */
+ if((dwStyle & WS_VISIBLE) && IsZoomed(top_child))
+ {
+ DPRINT("Restoring current maximized child %p\n", top_child);
+ SendMessageW( top_child, WM_SETREDRAW, FALSE, 0 );
+ ShowWindow(top_child, SW_RESTORE);
+ SendMessageW( top_child, WM_SETREDRAW, TRUE, 0 );
+ }
+ }
+
+ MDI_CalcDefaultChildPos(hWndParent, -1, mPos, 0, &id);
+
+ if (!(dwStyle & WS_POPUP)) hMenu = (HMENU)id;
+
+ if (dwStyle & (WS_CHILD | WS_POPUP))
+ {
+ if (x == CW_USEDEFAULT || x == CW_USEDEFAULT16)
+ {
+ x = mPos[0].x;
+ y = mPos[0].y;
+ }
+ if (nWidth == CW_USEDEFAULT || nWidth == CW_USEDEFAULT16 || !nWidth)
+ nWidth = mPos[1].x;
+ if (nHeight == CW_USEDEFAULT || nHeight == CW_USEDEFAULT16 || !nHeight)
+ nHeight = mPos[1].y;
+ }
+ }
+
+ hwnd = User32CreateWindowEx(dwExStyle,
+ (LPCSTR) lpClassName,
+ (LPCSTR) lpWindowName,
+ dwStyle,
+ x,
+ y,
+ nWidth,
+ nHeight,
+ hWndParent,
+ hMenu,
+ hInstance,
+ lpParam,
+ TRUE);
+
+ if ((dwStyle & WS_VISIBLE) && (dwExStyle & WS_EX_MDICHILD) && hwnd != (HWND)0)
+ {
+ SendMessageW(hWndParent, WM_MDIREFRESHMENU, 0, 0);
+ SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
+ }
+
+ return hwnd;
}
/*