2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for SetActiveWindow
5 * PROGRAMMERS: Giannis Adamopoulos
13 #include <undocuser.h>
17 /* FIXME: test for HWND_TOP, etc...*/
18 static int get_iwnd(HWND hWnd
)
20 if(hWnd
== hWnd1
) return 1;
21 else if(hWnd
== hWnd2
) return 2;
25 LRESULT CALLBACK
OwnerTestProc(HWND hWnd
, UINT message
, WPARAM wParam
, LPARAM lParam
)
27 int iwnd
= get_iwnd(hWnd
);
29 if(message
> WM_USER
|| !iwnd
|| IsDWmMsg(message
) || IseKeyMsg(message
))
30 return DefWindowProc(hWnd
, message
, wParam
, lParam
);
34 case WM_QUERYNEWPALETTE
:
37 int bits
= GetDeviceCaps(hdc
,BITSPIXEL
);
38 ok( bits
== 8 , "expected WM_QUERYNEWPALETTE only on 8bpp\n");
42 case WM_IME_SETCONTEXT
:
47 case WM_WINDOWPOSCHANGING
:
48 case WM_WINDOWPOSCHANGED
:
50 WINDOWPOS
* pwp
= (WINDOWPOS
*)lParam
;
51 ok(wParam
==0,"expected wParam=0\n");
52 RECORD_MESSAGE(iwnd
, message
, SENT
, get_iwnd(pwp
->hwndInsertAfter
), pwp
->flags
);
56 RECORD_MESSAGE(iwnd
, message
, SENT
, 0,0);
58 return DefWindowProc(hWnd
, message
, wParam
, lParam
);
61 static void FlushMessages()
65 while (PeekMessage( &msg
, 0, 0, 0, PM_REMOVE
))
67 int iwnd
= get_iwnd(msg
.hwnd
);
68 if(!(msg
.message
> WM_USER
|| !iwnd
|| IsDWmMsg(msg
.message
) || IseKeyMsg(msg
.message
)))
69 RECORD_MESSAGE(iwnd
, msg
.message
, POST
,0,0);
70 DispatchMessageA( &msg
);
74 static void create_test_windows()
76 RegisterSimpleClass(OwnerTestProc
, L
"ownertest");
77 hWnd1
= CreateWindowW(L
"ownertest", L
"ownertest", WS_OVERLAPPEDWINDOW
,
78 20, 20, 300, 300, NULL
, NULL
, 0, NULL
);
80 hWnd2
= CreateWindowW(L
"ownertest", L
"ownertest", WS_OVERLAPPEDWINDOW
,
81 200, 200, 300, 300, NULL
, NULL
, 0, NULL
);
84 static void set_default_zorder()
86 SetWindowPos(hWnd1
, 0, 0,0,0,0, SWP_NOMOVE
|SWP_NOREPOSITION
|SWP_NOSIZE
|SWP_SHOWWINDOW
);
87 SetWindowPos(hWnd2
, 0, 0,0,0,0, SWP_NOMOVE
|SWP_NOREPOSITION
|SWP_NOSIZE
|SWP_SHOWWINDOW
);
93 static void destroy_test_window()
97 UnregisterClassW(L
"testClass", 0);
100 MSG_ENTRY activate2to1_chain
[]={
103 {1,WM_WINDOWPOSCHANGING
, SENT
,0, SWP_NOSIZE
|SWP_NOMOVE
},
104 {1,WM_WINDOWPOSCHANGED
, SENT
,0, SWP_NOSIZE
|SWP_NOMOVE
|SWP_NOCLIENTMOVE
|SWP_NOCLIENTSIZE
},
111 MSG_ENTRY activate1to2_chain
[]={
114 {2,WM_WINDOWPOSCHANGING
, SENT
,0, SWP_NOSIZE
|SWP_NOMOVE
},
115 {2,WM_WINDOWPOSCHANGED
, SENT
,0, SWP_NOSIZE
|SWP_NOMOVE
|SWP_NOCLIENTMOVE
|SWP_NOCLIENTSIZE
},
122 void Test_msg_simple()
126 create_test_windows();
127 set_default_zorder();
129 SetActiveWindow(hWnd1
);
131 COMPARE_CACHE(activate2to1_chain
);
133 SetActiveWindow(hWnd2
);
135 COMPARE_CACHE(activate1to2_chain
);
137 destroy_test_window();
140 START_TEST(SetActiveWindow
)