1 /* 2 * PROJECT: ReactOS api tests 3 * LICENSE: GPL - See COPYING in the top level directory 4 * PURPOSE: Test for SetWindowExtEx 5 * PROGRAMMERS: Timo Kreuzer 6 */ 7 8 #include "precomp.h" 9 10 void Test_SetWindowExtEx() 11 { 12 HDC hDC; 13 BOOL ret; 14 SIZE WindowExt, ViewportExt; 15 //PGDI_TABLE_ENTRY pEntry; 16 //DC_ATTR* pDC_Attr; 17 18 hDC = CreateCompatibleDC(0); 19 ok(hDC != NULL, "CreateCompatibleDC failed. Skipping tests.\n"); 20 if (hDC == NULL) return; 21 22 SetLastError(0); 23 ret = SetWindowExtEx(0, 0, 0, NULL); 24 ok_err(ERROR_INVALID_HANDLE); 25 TEST(ret == 0); 26 27 SetLastError(0); 28 ret = SetWindowExtEx((HDC)0x1234, 0, 0, NULL); 29 ok_err(ERROR_INVALID_HANDLE); 30 TEST(ret == 0); 31 32 SetLastError(0); 33 ret = SetWindowExtEx((HDC)0x10000, 0, 0, NULL); 34 ok_err(ERROR_INVALID_PARAMETER); 35 TEST(ret == 0); 36 37 SetLastError(0); 38 ret = SetWindowExtEx((HDC)0x210000, 0, 0, NULL); // GDILoObjType_LO_ALTDC_TYPE 39 ok_err(ERROR_INVALID_HANDLE); 40 TEST(ret == 0); 41 42 SetLastError(0); 43 ret = SetWindowExtEx((HDC)0x260000, 0, 0, NULL); // GDILoObjType_LO_METAFILE16_TYPE 44 ok_err(ERROR_INVALID_HANDLE); 45 TEST(ret == 0); 46 47 SetLastError(0); 48 ret = SetWindowExtEx((HDC)0x460000, 0, 0, NULL); // GDILoObjType_LO_METAFILE_TYPE 49 ok_err(ERROR_INVALID_HANDLE); 50 TEST(ret == 0); 51 52 SetLastError(0); 53 ret = SetWindowExtEx((HDC)0x660000, 0, 0, NULL); // GDILoObjType_LO_METADC16_TYPE 54 ok_err(ERROR_INVALID_HANDLE); 55 TEST(ret == 0); 56 57 SetLastError(0); 58 ret = SetWindowExtEx(hDC, 0, 0, NULL); 59 ok_err(0); 60 TEST(ret == 1); 61 62 /* Test 16 bit handle */ 63 SetLastError(0); 64 ret = SetWindowExtEx((HDC)((ULONG_PTR)hDC & 0xffff), 0, 0, NULL); 65 ok_err(ERROR_INVALID_HANDLE); 66 TEST(ret == 0); 67 68 WindowExt.cx = 1234; 69 WindowExt.cy = 6789; 70 SetLastError(0); 71 ret = SetWindowExtEx(0, 0, 0, &WindowExt); 72 ok_err(ERROR_INVALID_HANDLE); 73 TEST(ret == 0); 74 TEST(WindowExt.cx == 1234); 75 TEST(WindowExt.cy == 6789); 76 77 DeleteDC(hDC); 78 79 /* Test with a deleted DC */ 80 SetLastError(0); 81 ret = SetWindowExtEx(hDC, 0, 0, NULL); 82 ok_err(ERROR_INVALID_PARAMETER); 83 TEST(ret == 0); 84 85 hDC = CreateCompatibleDC(0); 86 ok(hDC != NULL, "CreateCompatibleDC failed. Skipping tests.\n"); 87 if (hDC == NULL) return; 88 89 //pEntry = GdiHandleTable + GDI_HANDLE_GET_INDEX(hDC); 90 //pDC_Attr = pEntry->UserData; 91 //ASSERT(pDC_Attr); 92 93 /* Test setting 0 extents without changing the map mode (MM_TEXT) */ 94 ret = SetWindowExtEx(hDC, 0, 0, &WindowExt); 95 TEST(ret == 1); 96 TEST(WindowExt.cx == 1); 97 TEST(WindowExt.cy == 1); 98 99 /* Test setting proper extents without changing the map mode (MM_TEXT) */ 100 WindowExt.cx = WindowExt.cy = 0; 101 ret = SetWindowExtEx(hDC, 10, 20, &WindowExt); 102 TEST(ret == 1); 103 TEST(WindowExt.cx == 1); 104 TEST(WindowExt.cy == 1); 105 106 /* Values should not be changed */ 107 WindowExt.cx = WindowExt.cy = 0; 108 ret = SetWindowExtEx(hDC, 40, 30, &WindowExt); 109 TEST(ret == 1); 110 TEST(WindowExt.cx == 1); 111 TEST(WindowExt.cy == 1); 112 113 /* Check the viewport */ 114 GetViewportExtEx(hDC, &ViewportExt); 115 TEST(ViewportExt.cx == 1); 116 TEST(ViewportExt.cy == 1); 117 118 /* Test setting in isotropic mode with 0 extents */ 119 SetMapMode(hDC, MM_ISOTROPIC); 120 WindowExt.cx = WindowExt.cy = 0; 121 ret = SetWindowExtEx(hDC, 0, 0, &WindowExt); 122 TEST(ret == 0); 123 //TEST(WindowExt.cx == 3600); 124 //TEST(WindowExt.cy == 2700); 125 ret = SetWindowExtEx(hDC, 100, 0, &WindowExt); 126 TEST(ret == 0); 127 ret = SetWindowExtEx(hDC, 0, 100, &WindowExt); 128 TEST(ret == 0); 129 130 /* Test setting in isotropic mode */ 131 ret = SetWindowExtEx(hDC, 21224, 35114, &WindowExt); 132 TEST(ret == 1); 133 //TEST(WindowExt.cx == 3600); 134 //TEST(WindowExt.cy == 2700); 135 136 /* Values should be changed */ 137 ret = SetWindowExtEx(hDC, 138 4 * GetDeviceCaps(GetDC(0), HORZRES), 139 -4 * GetDeviceCaps(GetDC(0), VERTRES), 140 &WindowExt); 141 TEST(ret == 1); 142 TEST(WindowExt.cx == 21224); 143 TEST(WindowExt.cy == 35114); 144 145 /* Check the viewport, should be the same */ 146 GetViewportExtEx(hDC, &ViewportExt); 147 TEST(ViewportExt.cx == GetDeviceCaps(GetDC(0), HORZRES)); 148 TEST(ViewportExt.cy == -GetDeviceCaps(GetDC(0), VERTRES)); 149 150 /* again isotropic mode with 1:1 res */ 151 ret = SetWindowExtEx(hDC, 123, 123, &WindowExt); 152 TEST(ret == 1); 153 TEST(WindowExt.cx == 4 * GetDeviceCaps(GetDC(0), HORZRES)); 154 TEST(WindowExt.cy == -4 * GetDeviceCaps(GetDC(0), VERTRES)); 155 156 /* Test flXform */ 157 //TEST(pDC_Attr->flXform & PAGE_EXTENTS_CHANGED); 158 159 /* Check the viewport from the dcattr, without going through gdi */ 160 //TEST(pDC_Attr->szlViewportExt.cx == GetDeviceCaps(GetDC(0), HORZRES)); 161 //TEST(pDC_Attr->szlViewportExt.cy == -GetDeviceCaps(GetDC(0), VERTRES)); 162 163 /* Check the viewport with gdi, should not be the same */ 164 GetViewportExtEx(hDC, &ViewportExt); 165 TEST(ViewportExt.cx == GetDeviceCaps(GetDC(0), VERTRES)); 166 TEST(ViewportExt.cy == -GetDeviceCaps(GetDC(0), VERTRES)); 167 168 /* Test flXform */ 169 //TEST(pDC_Attr->flXform & PAGE_EXTENTS_CHANGED); 170 171 /* again isotropic mode with 3:1 res */ 172 ret = SetWindowExtEx(hDC, 300, 100, &WindowExt); 173 TEST(ret == 1); 174 TEST(WindowExt.cx == 123); 175 TEST(WindowExt.cy == 123); 176 177 /* Check the viewport now, should not be the same */ 178 GetViewportExtEx(hDC, &ViewportExt); 179 TEST(ViewportExt.cx == GetDeviceCaps(GetDC(0), VERTRES)); 180 TEST(ViewportExt.cy == -GetDeviceCaps(GetDC(0), VERTRES) / 3); 181 182 /* again isotropic mode with 1:3 res */ 183 SetViewportExtEx(hDC, 6000, 3000, 0); 184 ret = SetWindowExtEx(hDC, 200, 600, &WindowExt); 185 TEST(ret == 1); 186 TEST(WindowExt.cx == 300); 187 TEST(WindowExt.cy == 100); 188 189 /* Check the viewport now, should not be the same */ 190 GetViewportExtEx(hDC, &ViewportExt); 191 TEST(ViewportExt.cx == 1000); 192 TEST(ViewportExt.cy == 3000); 193 194 /* Test setting in anisotropic mode */ 195 SetMapMode(hDC, MM_ANISOTROPIC); 196 ret = SetWindowExtEx(hDC, 80, 60, &WindowExt); 197 TEST(ret == 1); 198 TEST(WindowExt.cx == 200); 199 TEST(WindowExt.cy == 600); 200 201 /* Values should be changed */ 202 ret = SetWindowExtEx(hDC, 500, 500, &WindowExt); 203 TEST(ret == 1); 204 TEST(WindowExt.cx == 80); 205 TEST(WindowExt.cy == 60); 206 207 /* Check the viewport */ 208 GetViewportExtEx(hDC, &ViewportExt); 209 TEST(ViewportExt.cx == 1000); 210 TEST(ViewportExt.cy == 3000); 211 212 /* Test setting in low metric mode */ 213 SetMapMode(hDC, MM_LOMETRIC); 214 ret = SetWindowExtEx(hDC, 120, 90, &WindowExt); 215 TEST(ret == 1); 216 //TEST(WindowExt.cx == 3600); 217 //TEST(WindowExt.cy == 2700); 218 219 /* Values should not be changed */ 220 WindowExt.cx = WindowExt.cy = 0; 221 ret = SetWindowExtEx(hDC, 900, 700, &WindowExt); 222 TEST(ret == 1); 223 //TEST(WindowExt.cx == 3600); 224 //TEST(WindowExt.cy == 2700); 225 226 /* Check the viewport */ 227 GetViewportExtEx(hDC, &ViewportExt); 228 TEST(ViewportExt.cx == GetDeviceCaps(GetDC(0), HORZRES)); 229 TEST(ViewportExt.cy == -GetDeviceCaps(GetDC(0), VERTRES)); 230 231 /* Test setting in high metric mode */ 232 SetMapMode(hDC, MM_HIMETRIC); 233 ret = SetWindowExtEx(hDC, 120, 90, &WindowExt); 234 TEST(ret == 1); 235 //TEST(WindowExt.cx == 36000); 236 //TEST(WindowExt.cy == 27000); 237 238 /* Values should not be changed */ 239 WindowExt.cx = WindowExt.cy = 0; 240 ret = SetWindowExtEx(hDC, 500, 300, &WindowExt); 241 TEST(ret == 1); 242 //TEST(WindowExt.cx == 36000); 243 //TEST(WindowExt.cy == 27000); 244 245 /* Check the viewport */ 246 GetViewportExtEx(hDC, &ViewportExt); 247 TEST(ViewportExt.cx == GetDeviceCaps(GetDC(0), HORZRES)); 248 TEST(ViewportExt.cy == -GetDeviceCaps(GetDC(0), VERTRES)); 249 250 /* Test setting in low english mode */ 251 SetMapMode(hDC, MM_LOENGLISH); 252 ret = SetWindowExtEx(hDC, 320, 290, &WindowExt); 253 TEST(ret == 1); 254 //TEST(WindowExt.cx == 1417); 255 //TEST(WindowExt.cy == 1063); 256 257 /* Values should not be changed */ 258 WindowExt.cx = WindowExt.cy = 0; 259 ret = SetWindowExtEx(hDC, 560, 140, &WindowExt); 260 TEST(ret == 1); 261 //TEST(WindowExt.cx == 1417); 262 //TEST(WindowExt.cy == 1063); 263 264 /* Check the viewport */ 265 GetViewportExtEx(hDC, &ViewportExt); 266 TEST(ViewportExt.cx == GetDeviceCaps(GetDC(0), HORZRES)); 267 TEST(ViewportExt.cy == -GetDeviceCaps(GetDC(0), VERTRES)); 268 269 /* Test setting in high english mode */ 270 SetMapMode(hDC, MM_HIENGLISH); 271 ret = SetWindowExtEx(hDC, 320, 290, &WindowExt); 272 TEST(ret == 1); 273 //TEST(WindowExt.cx == 14173); 274 //TEST(WindowExt.cy == 10630); 275 276 /* Values should not be changed */ 277 WindowExt.cx = WindowExt.cy = 0; 278 ret = SetWindowExtEx(hDC, 1560, 1140, &WindowExt); 279 TEST(ret == 1); 280 //TEST(WindowExt.cx == 14173); 281 //TEST(WindowExt.cy == 10630); 282 283 /* Check the viewport */ 284 GetViewportExtEx(hDC, &ViewportExt); 285 TEST(ViewportExt.cx == GetDeviceCaps(GetDC(0), HORZRES)); 286 TEST(ViewportExt.cy == -GetDeviceCaps(GetDC(0), VERTRES)); 287 288 /* Test setting in twips mode */ 289 SetMapMode(hDC, MM_TWIPS); 290 ret = SetWindowExtEx(hDC, 3320, 3290, &WindowExt); 291 TEST(ret == 1); 292 //TEST(WindowExt.cx == 20409); 293 //TEST(WindowExt.cy == 15307); 294 295 /* Values should not be changed */ 296 WindowExt.cx = WindowExt.cy = 0; 297 ret = SetWindowExtEx(hDC, 4560, 4140, &WindowExt); 298 TEST(ret == 1); 299 //TEST(WindowExt.cx == 20409); 300 //TEST(WindowExt.cy == 15307); 301 302 /* Check the viewport */ 303 GetViewportExtEx(hDC, &ViewportExt); 304 TEST(ViewportExt.cx == GetDeviceCaps(GetDC(0), HORZRES)); 305 TEST(ViewportExt.cy == -GetDeviceCaps(GetDC(0), VERTRES)); 306 307 /* test manually modifying the dcattr, should go to tests for GetViewportExtEx */ 308 SetMapMode(hDC, MM_ISOTROPIC); 309 ret = SetWindowExtEx(hDC, 420, 4140, &WindowExt); 310 //pDC_Attr->szlWindowExt.cx = 0; 311 GetViewportExtEx(hDC, &ViewportExt); 312 //TEST(pDC_Attr->szlWindowExt.cx == 0); 313 //TEST(ViewportExt.cx == 0); 314 315 DeleteDC(hDC); 316 } 317 318 START_TEST(SetWindowExtEx) 319 { 320 Test_SetWindowExtEx(); 321 } 322 323