2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for SetActiveWindow
5 * PROGRAMMERS: Giannis Adamopoulos
12 /* FIXME: test for HWND_TOP, etc...*/
13 static int get_iwnd(HWND hWnd
)
15 if(hWnd
== hWnd1
) return 1;
16 else if(hWnd
== hWnd2
) return 2;
20 LRESULT CALLBACK
OwnerTestProc(HWND hWnd
, UINT message
, WPARAM wParam
, LPARAM lParam
)
22 int iwnd
= get_iwnd(hWnd
);
24 if(message
> WM_USER
|| !iwnd
|| IsDWmMsg(message
) || IseKeyMsg(message
))
25 return DefWindowProc(hWnd
, message
, wParam
, lParam
);
29 case WM_QUERYNEWPALETTE
:
32 int bits
= GetDeviceCaps(hdc
,BITSPIXEL
);
33 ok( bits
== 8 , "expected WM_QUERYNEWPALETTE only on 8bpp\n");
37 case WM_IME_SETCONTEXT
:
42 case WM_WINDOWPOSCHANGING
:
43 case WM_WINDOWPOSCHANGED
:
45 WINDOWPOS
* pwp
= (WINDOWPOS
*)lParam
;
46 ok(wParam
==0,"expected wParam=0\n");
47 RECORD_MESSAGE(iwnd
, message
, SENT
, get_iwnd(pwp
->hwndInsertAfter
), pwp
->flags
);
51 RECORD_MESSAGE(iwnd
, message
, SENT
, 0,0);
53 return DefWindowProc(hWnd
, message
, wParam
, lParam
);
56 static void FlushMessages()
60 while (PeekMessage( &msg
, 0, 0, 0, PM_REMOVE
))
62 int iwnd
= get_iwnd(msg
.hwnd
);
63 if(!(msg
.message
> WM_USER
|| !iwnd
|| IsDWmMsg(msg
.message
) || IseKeyMsg(msg
.message
)))
64 RECORD_MESSAGE(iwnd
, msg
.message
, POST
,0,0);
65 DispatchMessageA( &msg
);
69 static void create_test_windows()
71 RegisterSimpleClass(OwnerTestProc
, L
"ownertest");
72 hWnd1
= CreateWindowW(L
"ownertest", L
"ownertest", WS_OVERLAPPEDWINDOW
,
73 20, 20, 300, 300, NULL
, NULL
, 0, NULL
);
75 hWnd2
= CreateWindowW(L
"ownertest", L
"ownertest", WS_OVERLAPPEDWINDOW
,
76 200, 200, 300, 300, NULL
, NULL
, 0, NULL
);
79 static void set_default_zorder()
81 SetWindowPos(hWnd1
, 0, 0,0,0,0, SWP_NOMOVE
|SWP_NOREPOSITION
|SWP_NOSIZE
|SWP_SHOWWINDOW
);
82 SetWindowPos(hWnd2
, 0, 0,0,0,0, SWP_NOMOVE
|SWP_NOREPOSITION
|SWP_NOSIZE
|SWP_SHOWWINDOW
);
88 static void destroy_test_window()
92 UnregisterClassW(L
"testClass", 0);
95 MSG_ENTRY activate2to1_chain
[]={
98 {1,WM_WINDOWPOSCHANGING
, SENT
,0, SWP_NOSIZE
|SWP_NOMOVE
},
99 {1,WM_WINDOWPOSCHANGED
, SENT
,0, SWP_NOSIZE
|SWP_NOMOVE
|SWP_NOCLIENTMOVE
|SWP_NOCLIENTSIZE
},
106 MSG_ENTRY activate1to2_chain
[]={
109 {2,WM_WINDOWPOSCHANGING
, SENT
,0, SWP_NOSIZE
|SWP_NOMOVE
},
110 {2,WM_WINDOWPOSCHANGED
, SENT
,0, SWP_NOSIZE
|SWP_NOMOVE
|SWP_NOCLIENTMOVE
|SWP_NOCLIENTSIZE
},
117 void Test_msg_simple()
121 create_test_windows();
122 set_default_zorder();
124 SetActiveWindow(hWnd1
);
126 COMPARE_CACHE(activate2to1_chain
);
128 SetActiveWindow(hWnd2
);
130 COMPARE_CACHE(activate1to2_chain
);
132 destroy_test_window();
135 START_TEST(SetActiveWindow
)