2 * PROJECT: ReactOS API tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for DeferWindowPos function family
5 * PROGRAMMERS: Thomas Faber
12 #define ok_windowpos(hwnd, x, y, w, h, wnd) do { RECT rt; GetWindowRect(hwnd, &rt); \
13 ok(rt.left == (x) && rt.top == (y) && rt.right == (x)+(w) && rt.bottom == (y)+(h), \
14 "Unexpected %s position: (%ld, %ld) - (%ld, %ld)\n", wnd, rt.left, rt.top, rt.right, rt.bottom); } while (0)
16 #define ok_lasterr(err, s) ok(GetLastError() == (err), "%s error = %lu\n", s, GetLastError())
18 static void Test_DeferWindowPos(HWND hWnd
, HWND hWnd2
)
23 /* close invalid handles */
24 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
25 ret
= EndDeferWindowPos(NULL
);
26 ok(ret
== 0, "EndDeferWindowPos succeeded with invalid handle\n");
27 ok_lasterr(ERROR_INVALID_DWP_HANDLE
, "EndDeferWindowPos");
29 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
30 ret
= EndDeferWindowPos((HDWP
)-1);
31 ok(ret
== 0, "EndDeferWindowPos succeeded with invalid handle\n");
32 ok_lasterr(ERROR_INVALID_DWP_HANDLE
, "EndDeferWindowPos");
34 /* negative window count */
35 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
36 hDwp
= BeginDeferWindowPos(-1);
37 ok(hDwp
== NULL
, "BeginDeferWindowPos failed\n");
38 ok_lasterr(ERROR_INVALID_PARAMETER
, "BeginDeferWindowPos");
41 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
42 hDwp
= BeginDeferWindowPos(0);
43 ok(hDwp
!= NULL
, "BeginDeferWindowPos failed\n");
44 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "BeginDeferWindowPos");
45 ret
= EndDeferWindowPos(hDwp
);
46 ok(ret
!= 0, "EndDeferWindowPos failed\n");
47 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "EndDeferWindowPos");
49 /* more windows than expected */
50 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
51 hDwp
= BeginDeferWindowPos(0);
52 ok(hDwp
!= NULL
, "BeginDeferWindowPos failed\n");
53 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "BeginDeferWindowPos");
54 hDwp
= DeferWindowPos(hDwp
, hWnd
, NULL
, 0, 0, 0, 0, SWP_NOMOVE
| SWP_NOSIZE
| SWP_NOZORDER
);
55 ok(hDwp
!= NULL
, "DeferWindowPos failed\n");
56 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "DeferWindowPos");
57 ret
= EndDeferWindowPos(hDwp
);
58 ok(ret
!= 0, "EndDeferWindowPos failed\n");
59 ok(GetLastError() == ERROR_SUCCESS
/* win7 sp1/x64 */
60 || GetLastError() == ERROR_INVALID_WINDOW_HANDLE
/* 2k3 sp1/x86 */,
61 "EndDeferWindowPos error = %lu\n", GetLastError());
62 ok_windowpos(hWnd
, 10, 20, 200, 210, "Window 1");
64 /* more windows than expected 2 */
65 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
66 hDwp
= BeginDeferWindowPos(1);
67 ok(hDwp
!= NULL
, "BeginDeferWindowPos failed\n");
68 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "BeginDeferWindowPos");
69 hDwp
= DeferWindowPos(hDwp
, hWnd
, NULL
, 30, 20, 190, 195, SWP_NOZORDER
);
70 ok(hDwp
!= NULL
, "DeferWindowPos failed\n");
71 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "DeferWindowPos");
72 hDwp
= DeferWindowPos(hDwp
, hWnd2
, NULL
, 20, 30, 195, 190, SWP_NOZORDER
);
73 ok(hDwp
!= NULL
, "DeferWindowPos failed\n");
74 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "DeferWindowPos");
75 ret
= EndDeferWindowPos(hDwp
);
76 ok(ret
!= 0, "EndDeferWindowPos failed\n");
77 ok_lasterr(ERROR_SUCCESS
, "EndDeferWindowPos");
78 ok_windowpos(hWnd
, 30, 20, 190, 195, "Window 1");
79 ok_windowpos(hWnd2
, 20, 30, 195, 190, "Window 2");
81 /* fewer windows than expected */
82 MoveWindow(hWnd
, 10, 20, 200, 210, FALSE
);
83 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
84 hDwp
= BeginDeferWindowPos(2);
85 ok(hDwp
!= NULL
, "BeginDeferWindowPos failed\n");
86 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "BeginDeferWindowPos");
87 hDwp
= DeferWindowPos(hDwp
, hWnd
, NULL
, 20, 10, 210, 200, SWP_NOMOVE
| SWP_NOSIZE
| SWP_NOZORDER
);
88 ok(hDwp
!= NULL
, "DeferWindowPos failed\n");
89 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "DeferWindowPos");
90 ret
= EndDeferWindowPos(hDwp
);
91 ok(ret
!= 0, "EndDeferWindowPos failed\n");
92 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "EndDeferWindowPos");
93 ok_windowpos(hWnd
, 10, 20, 200, 210, "Window 1");
95 /* no operation, 1 window */
96 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
97 hDwp
= BeginDeferWindowPos(1);
98 ok(hDwp
!= NULL
, "BeginDeferWindowPos failed\n");
99 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "BeginDeferWindowPos");
100 hDwp
= DeferWindowPos(hDwp
, hWnd
, NULL
, 20, 10, 210, 200, SWP_NOMOVE
| SWP_NOSIZE
| SWP_NOZORDER
);
101 ok(hDwp
!= NULL
, "DeferWindowPos failed\n");
102 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "DeferWindowPos");
103 ret
= EndDeferWindowPos(hDwp
);
104 ok(ret
!= 0, "EndDeferWindowPos failed\n");
105 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "EndDeferWindowPos");
106 ok_windowpos(hWnd
, 10, 20, 200, 210, "Window 1");
108 /* same window twice */
109 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
110 hDwp
= BeginDeferWindowPos(2);
111 ok(hDwp
!= NULL
, "BeginDeferWindowPos failed\n");
112 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "BeginDeferWindowPos");
113 hDwp
= DeferWindowPos(hDwp
, hWnd
, NULL
, 80, 90, 220, 210, SWP_NOZORDER
);
114 ok(hDwp
!= NULL
, "DeferWindowPos failed\n");
115 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "DeferWindowPos");
116 hDwp
= DeferWindowPos(hDwp
, hWnd
, NULL
, 100, 110, 230, 250, SWP_NOZORDER
);
117 ok(hDwp
!= NULL
, "DeferWindowPos failed\n");
118 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "DeferWindowPos");
119 ret
= EndDeferWindowPos(hDwp
);
120 ok(ret
!= 0, "EndDeferWindowPos failed\n");
121 ok_lasterr(ERROR_SUCCESS
, "EndDeferWindowPos");
122 ok_windowpos(hWnd
, 100, 110, 230, 250, "Window 1");
124 /* move & resize operation, 1 window */
125 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
126 hDwp
= BeginDeferWindowPos(1);
127 ok(hDwp
!= NULL
, "BeginDeferWindowPos failed\n");
128 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "BeginDeferWindowPos");
129 hDwp
= DeferWindowPos(hDwp
, hWnd
, NULL
, 20, 10, 210, 200, SWP_NOZORDER
);
130 ok(hDwp
!= NULL
, "DeferWindowPos failed\n");
131 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "DeferWindowPos");
132 ret
= EndDeferWindowPos(hDwp
);
133 ok(ret
!= 0, "EndDeferWindowPos failed\n");
134 ok_lasterr(ERROR_SUCCESS
, "EndDeferWindowPos");
135 ok_windowpos(hWnd
, 20, 10, 210, 200, "Window 1");
137 /* move & resize operation, 2 windows */
138 SetLastError(DNS_ERROR_RCODE_NXRRSET
);
139 hDwp
= BeginDeferWindowPos(2);
140 ok(hDwp
!= NULL
, "BeginDeferWindowPos failed\n");
141 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "BeginDeferWindowPos");
142 hDwp
= DeferWindowPos(hDwp
, hWnd
, NULL
, 50, 60, 230, 240, SWP_NOZORDER
);
143 ok(hDwp
!= NULL
, "DeferWindowPos failed\n");
144 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "DeferWindowPos");
145 hDwp
= DeferWindowPos(hDwp
, hWnd2
, NULL
, 70, 80, 250, 260, SWP_NOZORDER
);
146 ok(hDwp
!= NULL
, "DeferWindowPos failed\n");
147 ok_lasterr(DNS_ERROR_RCODE_NXRRSET
, "DeferWindowPos");
148 ret
= EndDeferWindowPos(hDwp
);
149 ok(ret
!= 0, "EndDeferWindowPos failed\n");
150 ok_lasterr(ERROR_SUCCESS
, "EndDeferWindowPos");
151 ok_windowpos(hWnd
, 50, 60, 230, 240, "Window 1");
152 ok_windowpos(hWnd2
, 70, 80, 250, 260, "Window 2");
155 START_TEST(DeferWindowPos
)
157 HWND hWnd
= CreateWindowExW(0, L
"EDIT", L
"abc", 0, 10, 20,
158 200, 210, NULL
, NULL
, GetModuleHandle(NULL
), NULL
);
159 HWND hWnd2
= CreateWindowExW(0, L
"EDIT", L
"def", 0, 30, 40,
160 220, 230, NULL
, NULL
, GetModuleHandle(NULL
), NULL
);
161 ok(hWnd
!= NULL
, "CreateWindow failed\n");
162 ok(hWnd2
!= NULL
, "CreateWindow failed\n");
163 ok_windowpos(hWnd
, 10, 20, 200, 210, "Window 1");
164 ok_windowpos(hWnd2
, 30, 40, 220, 230, "Window 2");
166 Test_DeferWindowPos(hWnd
, hWnd2
);
168 DestroyWindow(hWnd2
);