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 #include <undocuser.h>
15 #include <user32testhelpers.h>
19 /* FIXME: test for HWND_TOP, etc...*/
20 static int get_iwnd(HWND hWnd
)
22 if(hWnd
== hWnd1
) return 1;
23 else if(hWnd
== hWnd2
) return 2;
27 LRESULT CALLBACK
OwnerTestProc(HWND hWnd
, UINT message
, WPARAM wParam
, LPARAM lParam
)
29 int iwnd
= get_iwnd(hWnd
);
31 if(message
> WM_USER
|| !iwnd
|| IsDWmMsg(message
) || IseKeyMsg(message
))
32 return DefWindowProc(hWnd
, message
, wParam
, lParam
);
36 case WM_QUERYNEWPALETTE
:
39 int bits
= GetDeviceCaps(hdc
,BITSPIXEL
);
40 ok( bits
== 8 , "expected WM_QUERYNEWPALETTE only on 8bpp\n");
44 case WM_IME_SETCONTEXT
:
49 case WM_WINDOWPOSCHANGING
:
50 case WM_WINDOWPOSCHANGED
:
52 WINDOWPOS
* pwp
= (WINDOWPOS
*)lParam
;
53 ok(wParam
==0,"expected wParam=0\n");
54 RECORD_MESSAGE(iwnd
, message
, SENT
, get_iwnd(pwp
->hwndInsertAfter
), pwp
->flags
);
58 RECORD_MESSAGE(iwnd
, message
, SENT
, 0,0);
60 return DefWindowProc(hWnd
, message
, wParam
, lParam
);
63 static void FlushMessages()
67 while (PeekMessage( &msg
, 0, 0, 0, PM_REMOVE
))
69 int iwnd
= get_iwnd(msg
.hwnd
);
70 if(!(msg
.message
> WM_USER
|| !iwnd
|| IsDWmMsg(msg
.message
) || IseKeyMsg(msg
.message
)))
71 RECORD_MESSAGE(iwnd
, msg
.message
, POST
,0,0);
72 DispatchMessageA( &msg
);
76 static void create_test_windows()
78 RegisterSimpleClass(OwnerTestProc
, L
"ownertest");
79 hWnd1
= CreateWindowW(L
"ownertest", L
"ownertest", WS_OVERLAPPEDWINDOW
,
80 20, 20, 300, 300, NULL
, NULL
, 0, NULL
);
82 hWnd2
= CreateWindowW(L
"ownertest", L
"ownertest", WS_OVERLAPPEDWINDOW
,
83 200, 200, 300, 300, NULL
, NULL
, 0, NULL
);
86 static void set_default_zorder()
88 SetWindowPos(hWnd1
, 0, 0,0,0,0, SWP_NOMOVE
|SWP_NOREPOSITION
|SWP_NOSIZE
|SWP_SHOWWINDOW
);
89 SetWindowPos(hWnd2
, 0, 0,0,0,0, SWP_NOMOVE
|SWP_NOREPOSITION
|SWP_NOSIZE
|SWP_SHOWWINDOW
);
95 static void destroy_test_window()
99 UnregisterClassW(L
"testClass", 0);
102 MSG_ENTRY activate2to1_chain
[]={
105 {1,WM_WINDOWPOSCHANGING
, SENT
,0, SWP_NOSIZE
|SWP_NOMOVE
},
106 {1,WM_WINDOWPOSCHANGED
, SENT
,0, SWP_NOSIZE
|SWP_NOMOVE
|SWP_NOCLIENTMOVE
|SWP_NOCLIENTSIZE
},
113 MSG_ENTRY activate1to2_chain
[]={
116 {2,WM_WINDOWPOSCHANGING
, SENT
,0, SWP_NOSIZE
|SWP_NOMOVE
},
117 {2,WM_WINDOWPOSCHANGED
, SENT
,0, SWP_NOSIZE
|SWP_NOMOVE
|SWP_NOCLIENTMOVE
|SWP_NOCLIENTSIZE
},
124 void Test_msg_simple()
128 create_test_windows();
129 set_default_zorder();
131 SetActiveWindow(hWnd1
);
133 COMPARE_CACHE(activate2to1_chain
);
135 SetActiveWindow(hWnd2
);
137 COMPARE_CACHE(activate1to2_chain
);
139 destroy_test_window();
142 START_TEST(SetActiveWindow
)