Add a bunch of new MDI tests.
This commit is contained in:
parent
5ad619b19e
commit
18651f778e
|
@ -1073,6 +1073,201 @@ static const struct message WmDestroyMDIchildInvisibleSeq[] = {
|
|||
{ WM_NCDESTROY, sent },
|
||||
{ 0 }
|
||||
};
|
||||
/* CreateWindow for the 1st MDI child window, initially visible and maximized */
|
||||
static const struct message WmCreateMDIchildVisibleMaxSeq1[] = {
|
||||
{ HCBT_CREATEWND, hook },
|
||||
{ WM_NCCREATE, sent },
|
||||
{ WM_NCCALCSIZE, sent|wparam, 0 },
|
||||
{ WM_CREATE, sent },
|
||||
{ WM_SIZE, sent },
|
||||
{ WM_MOVE, sent },
|
||||
{ HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE },
|
||||
{ WM_GETMINMAXINFO, sent },
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|0x8000 },
|
||||
{ WM_NCCALCSIZE, sent|wparam, 1 },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|0x8000 },
|
||||
{ WM_SIZE, sent|defwinproc },
|
||||
/* in MDI frame */
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER },
|
||||
{ WM_NCCALCSIZE, sent|wparam, 1 },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
||||
/* Win2k sends wparam set to
|
||||
* MAKEWPARAM(WM_CREATE, MDI_FIRST_CHILD_ID + nTotalCreated),
|
||||
* while Win9x doesn't bother to set child window id according to
|
||||
* CLIENTCREATESTRUCT.idFirstChild
|
||||
*/
|
||||
{ WM_PARENTNOTIFY, sent /*|wparam, WM_CREATE*/ }, /* in MDI client */
|
||||
{ WM_SHOWWINDOW, sent|wparam, 1 },
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
||||
{ WM_MDIREFRESHMENU, sent/*|wparam|lparam, 0, 0*/ },
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE },
|
||||
{ WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 },
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
|
||||
|
||||
/* Win9x: message sequence terminates here. */
|
||||
|
||||
{ WM_NCACTIVATE, sent|wparam|defwinproc, 1 },
|
||||
{ HCBT_SETFOCUS, hook }, /* in MDI client */
|
||||
{ WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */
|
||||
{ WM_SETFOCUS, sent }, /* in MDI client */
|
||||
{ HCBT_SETFOCUS, hook },
|
||||
{ WM_KILLFOCUS, sent }, /* in MDI client */
|
||||
{ WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */
|
||||
{ WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 },
|
||||
{ WM_SETFOCUS, sent|defwinproc },
|
||||
{ WM_MDIACTIVATE, sent|defwinproc },
|
||||
/* in MDI frame */
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER },
|
||||
{ WM_NCCALCSIZE, sent|wparam, 1 },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
||||
{ 0 }
|
||||
};
|
||||
/* CreateWindow for the 2nd MDI child window, initially visible and maximized */
|
||||
static const struct message WmCreateMDIchildVisibleMaxSeq2[] = {
|
||||
/* restore the 1st MDI child */
|
||||
{ WM_SETREDRAW, sent|wparam, 0 },
|
||||
{ HCBT_MINMAX, hook },
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|0x8000 },
|
||||
{ WM_NCCALCSIZE, sent|wparam, 1 },
|
||||
{ WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|0x8000 },
|
||||
{ WM_SIZE, sent|defwinproc },
|
||||
/* in MDI frame */
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER },
|
||||
{ WM_NCCALCSIZE, sent|wparam, 1 },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
||||
{ WM_SETREDRAW, sent|wparam, 1 }, /* in the 1st MDI child */
|
||||
/* create the 2nd MDI child */
|
||||
{ HCBT_CREATEWND, hook },
|
||||
{ WM_NCCREATE, sent },
|
||||
{ WM_NCCALCSIZE, sent|wparam, 0 },
|
||||
{ WM_CREATE, sent },
|
||||
{ WM_SIZE, sent },
|
||||
{ WM_MOVE, sent },
|
||||
{ HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE },
|
||||
{ WM_GETMINMAXINFO, sent },
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|0x8000 },
|
||||
{ WM_NCCALCSIZE, sent|wparam, 1 },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|0x8000 },
|
||||
{ WM_SIZE, sent|defwinproc },
|
||||
/* in MDI frame */
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER },
|
||||
{ WM_NCCALCSIZE, sent|wparam, 1 },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
||||
/* Win2k sends wparam set to
|
||||
* MAKEWPARAM(WM_CREATE, MDI_FIRST_CHILD_ID + nTotalCreated),
|
||||
* while Win9x doesn't bother to set child window id according to
|
||||
* CLIENTCREATESTRUCT.idFirstChild
|
||||
*/
|
||||
{ WM_PARENTNOTIFY, sent /*|wparam, WM_CREATE*/ }, /* in MDI client */
|
||||
{ WM_SHOWWINDOW, sent|wparam, 1 },
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
||||
{ WM_MDIREFRESHMENU, sent/*|wparam|lparam, 0, 0*/ },
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE },
|
||||
{ WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 },
|
||||
|
||||
{ WM_NCACTIVATE, sent|wparam|defwinproc, 0 }, /* in the 1st MDI child */
|
||||
{ WM_MDIACTIVATE, sent|defwinproc }, /* in the 1st MDI child */
|
||||
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
|
||||
|
||||
/* Win9x: message sequence terminates here. */
|
||||
|
||||
{ WM_NCACTIVATE, sent|wparam|defwinproc, 1 },
|
||||
{ HCBT_SETFOCUS, hook },
|
||||
{ WM_KILLFOCUS, sent|defwinproc }, /* in the 1st MDI child */
|
||||
{ WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 0 }, /* in the 1st MDI child */
|
||||
{ WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */
|
||||
{ WM_SETFOCUS, sent }, /* in MDI client */
|
||||
{ HCBT_SETFOCUS, hook },
|
||||
{ WM_KILLFOCUS, sent }, /* in MDI client */
|
||||
{ WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */
|
||||
{ WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 },
|
||||
{ WM_SETFOCUS, sent|defwinproc },
|
||||
|
||||
{ WM_MDIACTIVATE, sent|defwinproc },
|
||||
/* in MDI frame */
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER },
|
||||
{ WM_NCCALCSIZE, sent|wparam, 1 },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
||||
{ 0 }
|
||||
};
|
||||
/* WM_SYSCOMMAND/SC_CLOSE for the 2nd MDI child window, initially visible and maximized */
|
||||
static const struct message WmDestroyMDIchildVisibleMaxSeq2[] = {
|
||||
{ WM_SYSCOMMAND, sent|wparam, SC_CLOSE },
|
||||
{ HCBT_SYSCOMMAND, hook },
|
||||
{ WM_CLOSE, sent|defwinproc },
|
||||
{ WM_MDIDESTROY, sent }, /* in MDI client */
|
||||
|
||||
/* bring the 1st MDI child to top */
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOSIZE|SWP_NOMOVE }, /* in the 1st MDI child */
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE }, /* in the 2nd MDI child */
|
||||
{ WM_CHILDACTIVATE, sent|defwinproc|wparam|lparam, 0, 0 }, /* in the 1st MDI child */
|
||||
{ WM_NCACTIVATE, sent|wparam|defwinproc, 0 }, /* in the 1st MDI child */
|
||||
{ WM_MDIACTIVATE, sent|defwinproc }, /* in the 1st MDI child */
|
||||
|
||||
/* maximize the 1st MDI child */
|
||||
{ HCBT_MINMAX, hook },
|
||||
{ WM_GETMINMAXINFO, sent|defwinproc },
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_FRAMECHANGED|0x8000 },
|
||||
{ WM_NCCALCSIZE, sent|defwinproc|wparam, 1 },
|
||||
{ WM_CHILDACTIVATE, sent|defwinproc|wparam|lparam, 0, 0 },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|0x8000 },
|
||||
{ WM_SIZE, sent|defwinproc },
|
||||
|
||||
/* restore the 2nd MDI child */
|
||||
{ WM_SETREDRAW, sent|defwinproc|wparam, 0 },
|
||||
{ HCBT_MINMAX, hook },
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_SHOWWINDOW|SWP_NOZORDER|0x8000 },
|
||||
{ WM_NCCALCSIZE, sent|defwinproc|wparam, 1 },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|0x8000 },
|
||||
{ WM_SIZE, sent|defwinproc },
|
||||
{ WM_SETREDRAW, sent|defwinproc|wparam, 1 },
|
||||
/* in MDI frame */
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER },
|
||||
{ WM_NCCALCSIZE, sent|wparam, 1 },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
||||
|
||||
/* bring the 1st MDI child to top */
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
|
||||
{ WM_NCACTIVATE, sent|wparam|defwinproc, 1 },
|
||||
{ HCBT_SETFOCUS, hook },
|
||||
{ WM_KILLFOCUS, sent|defwinproc },
|
||||
{ WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 0 },
|
||||
{ WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */
|
||||
{ WM_SETFOCUS, sent }, /* in MDI client */
|
||||
{ HCBT_SETFOCUS, hook },
|
||||
{ WM_KILLFOCUS, sent }, /* in MDI client */
|
||||
{ WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */
|
||||
{ WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 },
|
||||
{ WM_SETFOCUS, sent|defwinproc },
|
||||
{ WM_MDIACTIVATE, sent|defwinproc },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
||||
|
||||
/* apparently ShowWindow(SW_SHOW) on an MDI client */
|
||||
{ WM_SHOWWINDOW, sent|wparam, 1 },
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
||||
{ WM_MDIREFRESHMENU, sent },
|
||||
|
||||
{ HCBT_DESTROYWND, hook },
|
||||
/* Win2k sends wparam set to
|
||||
* MAKEWPARAM(WM_DESTROY, MDI_FIRST_CHILD_ID + nTotalCreated),
|
||||
* while Win9x doesn't bother to set child window id according to
|
||||
* CLIENTCREATESTRUCT.idFirstChild
|
||||
*/
|
||||
{ WM_PARENTNOTIFY, sent /*|wparam, WM_DESTROY*/ }, /* in MDI client */
|
||||
{ WM_SHOWWINDOW, sent|defwinproc|wparam, 0 },
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam|defwinproc, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER },
|
||||
{ WM_ERASEBKGND, sent|parent|optional },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam|defwinproc, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
||||
|
||||
{ WM_DESTROY, sent|defwinproc },
|
||||
{ WM_NCDESTROY, sent|defwinproc },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
static HWND mdi_client;
|
||||
static WNDPROC old_mdi_client_proc;
|
||||
|
@ -1250,7 +1445,8 @@ static BOOL mdi_RegisterWindowClasses(void)
|
|||
static void test_mdi_messages(void)
|
||||
{
|
||||
CLIENTCREATESTRUCT client_cs;
|
||||
HWND mdi_frame, mdi_child;
|
||||
HWND mdi_frame, mdi_child, mdi_child2, active_child;
|
||||
BOOL zoomed;
|
||||
|
||||
assert(mdi_RegisterWindowClasses());
|
||||
|
||||
|
@ -1279,6 +1475,10 @@ static void test_mdi_messages(void)
|
|||
|
||||
ok(GetFocus() == mdi_frame, "input focus should be on MDI frame not on %p\n", GetFocus());
|
||||
|
||||
active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed);
|
||||
ok(!active_child, "wrong active MDI child %p\n", active_child);
|
||||
ok(!zoomed, "wrong zoomed state %d\n", zoomed);
|
||||
|
||||
SetFocus(0);
|
||||
flush_sequence();
|
||||
|
||||
|
@ -1293,25 +1493,146 @@ static void test_mdi_messages(void)
|
|||
ok(GetWindowLongA(mdi_child, GWL_STYLE) & WS_VISIBLE, "MDI child should be visible\n");
|
||||
ok(IsWindowVisible(mdi_child), "MDI child should be visible\n");
|
||||
|
||||
active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed);
|
||||
ok(active_child == mdi_child, "wrong active MDI child %p\n", active_child);
|
||||
ok(!zoomed, "wrong zoomed state %d\n", zoomed);
|
||||
flush_sequence();
|
||||
|
||||
DestroyWindow(mdi_child);
|
||||
ok_sequence(WmDestroyMDIchildVisibleSeq, "Destroy visible MDI child window", TRUE);
|
||||
|
||||
/* Win2k: MDI client still returns a just destroyed child as active
|
||||
* Win9x: MDI client returns 0
|
||||
*/
|
||||
active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed);
|
||||
ok(active_child == mdi_child || /* win2k */
|
||||
!active_child, /* win9x */
|
||||
"wrong active MDI child %p\n", active_child);
|
||||
ok(!zoomed, "wrong zoomed state %d\n", zoomed);
|
||||
|
||||
SetFocus(0);
|
||||
flush_sequence();
|
||||
|
||||
trace("creating invisible MDI child window\n");
|
||||
mdi_child = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_class", "MDI child",
|
||||
mdi_child2 = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_class", "MDI child",
|
||||
WS_CHILD,
|
||||
0, 0, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
mdi_client, 0, GetModuleHandleA(0), NULL);
|
||||
assert(mdi_child);
|
||||
assert(mdi_child2);
|
||||
ok_sequence(WmCreateMDIchildInvisibleSeq, "Create invisible MDI child window", TRUE);
|
||||
|
||||
ok(!(GetWindowLongA(mdi_child, GWL_STYLE) & WS_VISIBLE), "MDI child should not be visible\n");
|
||||
ok(!IsWindowVisible(mdi_child), "MDI child should not be visible\n");
|
||||
ok(!(GetWindowLongA(mdi_child2, GWL_STYLE) & WS_VISIBLE), "MDI child should not be visible\n");
|
||||
ok(!IsWindowVisible(mdi_child2), "MDI child should not be visible\n");
|
||||
|
||||
/* Win2k: MDI client still returns a just destroyed child as active
|
||||
* Win9x: MDI client returns mdi_child2
|
||||
*/
|
||||
active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed);
|
||||
ok(active_child == mdi_child || /* win2k */
|
||||
active_child == mdi_child2, /* win9x */
|
||||
"wrong active MDI child %p\n", active_child);
|
||||
ok(!zoomed, "wrong zoomed state %d\n", zoomed);
|
||||
flush_sequence();
|
||||
|
||||
ShowWindow(mdi_child2, SW_SHOW);
|
||||
ok_sequence(WmShowChildSeq, "ShowWindow(SW_SHOW):MDI child", TRUE);
|
||||
|
||||
ShowWindow(mdi_child2, SW_HIDE);
|
||||
ok_sequence(WmHideChildSeq, "ShowWindow(SW_HIDE):MDI child", FALSE);
|
||||
|
||||
DestroyWindow(mdi_child2);
|
||||
ok_sequence(WmDestroyMDIchildInvisibleSeq, "Destroy invisible MDI child window", TRUE);
|
||||
|
||||
/* test for maximized MDI children */
|
||||
trace("creating maximized visible MDI child window 1\n");
|
||||
mdi_child = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_class", "MDI child",
|
||||
WS_CHILD | WS_VISIBLE | WS_MAXIMIZEBOX | WS_MAXIMIZE,
|
||||
0, 0, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
mdi_client, 0, GetModuleHandleA(0), NULL);
|
||||
assert(mdi_child);
|
||||
ok_sequence(WmCreateMDIchildVisibleMaxSeq1, "Create maximized visible 1st MDI child window", TRUE);
|
||||
ok(IsZoomed(mdi_child), "1st MDI child should be maximized\n");
|
||||
|
||||
active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed);
|
||||
ok(active_child == mdi_child, "wrong active MDI child %p\n", active_child);
|
||||
ok(zoomed, "wrong zoomed state %d\n", zoomed);
|
||||
flush_sequence();
|
||||
|
||||
trace("creating maximized visible MDI child window 2\n");
|
||||
mdi_child2 = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_class", "MDI child",
|
||||
WS_CHILD | WS_VISIBLE | WS_MAXIMIZEBOX | WS_MAXIMIZE,
|
||||
0, 0, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
mdi_client, 0, GetModuleHandleA(0), NULL);
|
||||
assert(mdi_child2);
|
||||
ok_sequence(WmCreateMDIchildVisibleMaxSeq2, "Create maximized visible 2nd MDI child 2 window", TRUE);
|
||||
ok(IsZoomed(mdi_child2), "2nd MDI child should be maximized\n");
|
||||
ok(!IsZoomed(mdi_child), "1st MDI child should NOT be maximized\n");
|
||||
|
||||
active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed);
|
||||
ok(active_child == mdi_child2, "wrong active MDI child %p\n", active_child);
|
||||
ok(zoomed, "wrong zoomed state %d\n", zoomed);
|
||||
flush_sequence();
|
||||
|
||||
DestroyWindow(mdi_child2);
|
||||
ok_sequence(WmDestroyMDIchildVisibleSeq, "Destroy visible MDI child window", TRUE);
|
||||
|
||||
ok(!IsZoomed(mdi_child), "1st MDI child should NOT be maximized\n");
|
||||
ok(GetFocus() == 0, "GetFocus() = %p\n", GetFocus());
|
||||
|
||||
/* Win2k: MDI client still returns a just destroyed child as active
|
||||
* Win9x: MDI client returns 0
|
||||
*/
|
||||
active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed);
|
||||
ok(active_child == mdi_child2 || /* win2k */
|
||||
!active_child, /* win9x */
|
||||
"wrong active MDI child %p\n", active_child);
|
||||
flush_sequence();
|
||||
|
||||
ShowWindow(mdi_child, SW_MAXIMIZE);
|
||||
ok(IsZoomed(mdi_child), "1st MDI child should be maximized\n");
|
||||
flush_sequence();
|
||||
|
||||
trace("re-creating maximized visible MDI child window 2\n");
|
||||
mdi_child2 = CreateWindowExA(WS_EX_MDICHILD, "MDI_child_class", "MDI child",
|
||||
WS_CHILD | WS_VISIBLE | WS_MAXIMIZEBOX | WS_MAXIMIZE,
|
||||
0, 0, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
mdi_client, 0, GetModuleHandleA(0), NULL);
|
||||
assert(mdi_child2);
|
||||
ok_sequence(WmCreateMDIchildVisibleMaxSeq2, "Create maximized visible 2nd MDI child 2 window", TRUE);
|
||||
ok(IsZoomed(mdi_child2), "2nd MDI child should be maximized\n");
|
||||
ok(!IsZoomed(mdi_child), "1st MDI child should NOT be maximized\n");
|
||||
|
||||
active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed);
|
||||
ok(active_child == mdi_child2, "wrong active MDI child %p\n", active_child);
|
||||
ok(zoomed, "wrong zoomed state %d\n", zoomed);
|
||||
flush_sequence();
|
||||
|
||||
SendMessageA(mdi_child2, WM_SYSCOMMAND, SC_CLOSE, 0);
|
||||
ok_sequence(WmDestroyMDIchildVisibleMaxSeq2, "WM_SYSCOMMAND/SC_CLOSE on a visible maximized MDI child window", TRUE);
|
||||
ok(!IsWindow(mdi_child2), "MDI child 2 should be destroyed\n");
|
||||
|
||||
ok(IsZoomed(mdi_child), "1st MDI child should be maximized\n");
|
||||
todo_wine {
|
||||
ok(GetFocus() == mdi_child, "GetFocus() = %p\n", GetFocus());
|
||||
}
|
||||
|
||||
active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed);
|
||||
ok(active_child == mdi_child, "wrong active MDI child %p\n", active_child);
|
||||
ok(zoomed, "wrong zoomed state %d\n", zoomed);
|
||||
flush_sequence();
|
||||
|
||||
DestroyWindow(mdi_child);
|
||||
ok_sequence(WmDestroyMDIchildInvisibleSeq, "Destroy invisible MDI child window", TRUE);
|
||||
ok_sequence(WmDestroyMDIchildVisibleSeq, "Destroy visible MDI child window", TRUE);
|
||||
|
||||
/* Win2k: MDI client still returns a just destroyed child as active
|
||||
* Win9x: MDI client returns 0
|
||||
*/
|
||||
active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed);
|
||||
ok(active_child == mdi_child || /* win2k */
|
||||
!active_child, /* win9x */
|
||||
"wrong active MDI child %p\n", active_child);
|
||||
flush_sequence();
|
||||
/* end of test for maximized MDI children */
|
||||
|
||||
DestroyWindow(mdi_client);
|
||||
ok_sequence(WmDestroyMDIclientSeq, "Destroy MDI client window", FALSE);
|
||||
|
|
Loading…
Reference in New Issue