1 /* Unit test suite for uxtheme API functions
3 * Copyright 2006 Paul Vriens
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
27 #include "wine/test.h"
29 static HRESULT (WINAPI * pCloseThemeData)(HTHEME);
30 static HRESULT (WINAPI * pGetCurrentThemeName)(LPWSTR, int, LPWSTR, int, LPWSTR, int);
31 static HTHEME (WINAPI * pGetWindowTheme)(HWND);
32 static BOOL (WINAPI * pIsAppThemed)(VOID);
33 static BOOL (WINAPI * pIsThemeActive)(VOID);
34 static BOOL (WINAPI * pIsThemePartDefined)(HTHEME, int, int);
35 static HTHEME (WINAPI * pOpenThemeData)(HWND, LPCWSTR);
36 static HTHEME (WINAPI * pOpenThemeDataEx)(HWND, LPCWSTR, DWORD);
37 static HRESULT (WINAPI * pSetWindowTheme)(HWND, LPCWSTR, LPCWSTR);
39 static HMODULE hUxtheme = 0;
41 #define UXTHEME_GET_PROC(func) p ## func = (void*)GetProcAddress(hUxtheme, #func);
43 static BOOL InitFunctionPtrs(void)
45 hUxtheme = LoadLibraryA("uxtheme.dll");
47 trace("Could not load uxtheme.dll\n");
52 UXTHEME_GET_PROC(CloseThemeData)
53 UXTHEME_GET_PROC(GetCurrentThemeName)
54 UXTHEME_GET_PROC(GetWindowTheme)
55 UXTHEME_GET_PROC(IsAppThemed)
56 UXTHEME_GET_PROC(IsThemeActive)
57 UXTHEME_GET_PROC(IsThemePartDefined)
58 UXTHEME_GET_PROC(OpenThemeData)
59 UXTHEME_GET_PROC(OpenThemeDataEx)
60 UXTHEME_GET_PROC(SetWindowTheme)
62 /* The following functions should be available, if not return FALSE. The Vista functions will
63 * be checked (at some point in time) within the single tests if needed. All used functions for
64 * now are present on WinXP, W2K3 and Wine.
66 if (!pCloseThemeData || !pGetCurrentThemeName ||
67 !pGetWindowTheme || !pIsAppThemed ||
68 !pIsThemeActive || !pIsThemePartDefined ||
69 !pOpenThemeData || !pSetWindowTheme)
71 FreeLibrary(hUxtheme);
78 static void test_IsThemed(void)
84 SetLastError(0xdeadbeef);
85 bThemeActive = pIsThemeActive();
86 trace("Theming is %s\n", (bThemeActive) ? "active" : "inactive");
88 /* This test is not themed */
89 SetLastError(0xdeadbeef);
90 bAppThemed = pIsAppThemed();
94 ok( bAppThemed == FALSE, "Expected FALSE as this test executable is not (yet) themed.\n");
96 /* Although Wine currently returns FALSE, the logic behind it is wrong. It is not a todo_wine though in the testing sense */
97 ok( bAppThemed == FALSE, "Expected FALSE as this test executable is not (yet) themed.\n");
99 ok( GetLastError() == ERROR_SUCCESS,
100 "Expected ERROR_SUCCESS, got 0x%08x\n",
103 SetLastError(0xdeadbeef);
104 bTPDefined = pIsThemePartDefined(NULL, 0 , 0);
105 ok( bTPDefined == FALSE, "Expected FALSE\n");
106 ok( GetLastError() == E_HANDLE,
107 "Expected E_HANDLE, got 0x%08x\n",
111 static void test_GetWindowTheme(void)
117 SetLastError(0xdeadbeef);
118 hTheme = pGetWindowTheme(NULL);
119 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
121 ok( GetLastError() == E_HANDLE,
122 "Expected E_HANDLE, got 0x%08x\n",
125 /* Only do the bare minimum to get a valid hwnd */
126 hWnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100,0, 0, 0, NULL);
129 SetLastError(0xdeadbeef);
130 hTheme = pGetWindowTheme(hWnd);
131 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
132 ok( GetLastError() == 0xdeadbeef,
133 "Expected 0xdeadbeef, got 0x%08x\n",
136 bDestroyed = DestroyWindow(hWnd);
138 trace("Window %p couldn't be destroyed : 0x%08x\n",
139 hWnd, GetLastError());
142 static void test_SetWindowTheme(void)
148 SetLastError(0xdeadbeef);
149 hRes = pSetWindowTheme(NULL, NULL, NULL);
152 ok( hRes == E_HANDLE, "Expected E_HANDLE, got 0x%08x\n", hRes);
153 ok( GetLastError() == 0xdeadbeef,
154 "Expected 0xdeadbeef, got 0x%08x\n",
158 /* Only do the bare minimum to get a valid hwnd */
159 hWnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100,0, 0, 0, NULL);
162 SetLastError(0xdeadbeef);
163 hRes = pSetWindowTheme(hWnd, NULL, NULL);
164 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
165 ok( GetLastError() == 0xdeadbeef,
166 "Expected 0xdeadbeef, got 0x%08x\n",
169 bDestroyed = DestroyWindow(hWnd);
171 trace("Window %p couldn't be destroyed : 0x%08x\n",
172 hWnd, GetLastError());
175 static void test_OpenThemeData(void)
177 HTHEME hTheme, hTheme2;
184 WCHAR szInvalidClassList[] = {'D','E','A','D','B','E','E','F', 0 };
185 WCHAR szButtonClassList[] = {'B','u','t','t','o','n', 0 };
186 WCHAR szButtonClassList2[] = {'b','U','t','T','o','N', 0 };
187 WCHAR szClassList[] = {'B','u','t','t','o','n',';','L','i','s','t','B','o','x', 0 };
189 bThemeActive = pIsThemeActive();
192 SetLastError(0xdeadbeef);
193 hTheme = pOpenThemeData(NULL, NULL);
194 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
196 ok( GetLastError() == E_POINTER,
197 "Expected GLE() to be E_POINTER, got 0x%08x\n",
200 /* A NULL hWnd and an invalid classlist */
201 SetLastError(0xdeadbeef);
202 hTheme = pOpenThemeData(NULL, szInvalidClassList);
203 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
205 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
206 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
209 SetLastError(0xdeadbeef);
210 hTheme = pOpenThemeData(NULL, szClassList);
213 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
215 ok( GetLastError() == ERROR_SUCCESS,
216 "Expected ERROR_SUCCESS, got 0x%08x\n",
221 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
223 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
224 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
228 /* Only do the bare minimum to get a valid hdc */
229 hWnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100,0, 0, 0, NULL);
232 SetLastError(0xdeadbeef);
233 hTheme = pOpenThemeData(hWnd, NULL);
234 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
236 ok( GetLastError() == E_POINTER,
237 "Expected GLE() to be E_POINTER, got 0x%08x\n",
240 SetLastError(0xdeadbeef);
241 hTheme = pOpenThemeData(hWnd, szInvalidClassList);
242 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
244 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
245 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
250 SetLastError(0xdeadbeef);
251 hTheme = pOpenThemeData(hWnd, szButtonClassList);
252 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
254 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
255 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
257 skip("No active theme, skipping rest of OpenThemeData tests\n");
261 /* Only do the next checks if we have an active theme */
263 SetLastError(0xdeadbeef);
264 hTheme = pOpenThemeData(hWnd, szButtonClassList);
265 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
267 ok( GetLastError() == ERROR_SUCCESS,
268 "Expected ERROR_SUCCESS, got 0x%08x\n",
271 /* Test with bUtToN instead of Button */
272 SetLastError(0xdeadbeef);
273 hTheme = pOpenThemeData(hWnd, szButtonClassList2);
274 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
276 ok( GetLastError() == ERROR_SUCCESS,
277 "Expected ERROR_SUCCESS, got 0x%08x\n",
280 SetLastError(0xdeadbeef);
281 hTheme = pOpenThemeData(hWnd, szClassList);
282 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
284 ok( GetLastError() == ERROR_SUCCESS,
285 "Expected ERROR_SUCCESS, got 0x%08x\n",
288 /* GetWindowTheme should return the last handle opened by OpenThemeData */
289 SetLastError(0xdeadbeef);
290 hTheme2 = pGetWindowTheme(hWnd);
291 ok( hTheme == hTheme2, "Expected the same HTHEME handle (%p<->%p)\n",
293 ok( GetLastError() == 0xdeadbeef,
294 "Expected 0xdeadbeef, got 0x%08x\n",
297 SetLastError(0xdeadbeef);
298 hRes = pCloseThemeData(hTheme);
299 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
300 ok( GetLastError() == 0xdeadbeef,
301 "Expected 0xdeadbeef, got 0x%08x\n",
304 /* Close a second time */
305 SetLastError(0xdeadbeef);
306 hRes = pCloseThemeData(hTheme);
307 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
308 ok( GetLastError() == 0xdeadbeef,
309 "Expected 0xdeadbeef, got 0x%08x\n",
312 /* See if closing makes a difference for GetWindowTheme */
313 SetLastError(0xdeadbeef);
315 hTheme2 = pGetWindowTheme(hWnd);
316 ok( hTheme == hTheme2, "Expected the same HTHEME handle (%p<->%p)\n",
318 ok( GetLastError() == 0xdeadbeef,
319 "Expected 0xdeadbeef, got 0x%08x\n",
322 SetLastError(0xdeadbeef);
323 bTPDefined = pIsThemePartDefined(hTheme, 0 , 0);
326 ok( bTPDefined == FALSE, "Expected FALSE\n");
327 ok( GetLastError() == ERROR_SUCCESS,
328 "Expected ERROR_SUCCESS, got 0x%08x\n",
332 bDestroyed = DestroyWindow(hWnd);
334 trace("Window %p couldn't be destroyed : 0x%08x\n",
335 hWnd, GetLastError());
338 static void test_OpenThemeDataEx(void)
345 WCHAR szInvalidClassList[] = {'D','E','A','D','B','E','E','F', 0 };
346 WCHAR szButtonClassList[] = {'B','u','t','t','o','n', 0 };
347 WCHAR szButtonClassList2[] = {'b','U','t','T','o','N', 0 };
348 WCHAR szClassList[] = {'B','u','t','t','o','n',';','L','i','s','t','B','o','x', 0 };
350 if (!pOpenThemeDataEx)
352 win_skip("OpenThemeDataEx not available\n");
356 bThemeActive = pIsThemeActive();
359 SetLastError(0xdeadbeef);
360 hTheme = pOpenThemeDataEx(NULL, NULL, 0);
361 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
363 ok( GetLastError() == E_POINTER,
364 "Expected GLE() to be E_POINTER, got 0x%08x\n",
367 /* A NULL hWnd and an invalid classlist without flags */
368 SetLastError(0xdeadbeef);
369 hTheme = pOpenThemeDataEx(NULL, szInvalidClassList, 0);
370 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
372 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
373 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
376 SetLastError(0xdeadbeef);
377 hTheme = pOpenThemeDataEx(NULL, szClassList, 0);
380 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
382 ok( GetLastError() == ERROR_SUCCESS,
383 "Expected ERROR_SUCCESS, got 0x%08x\n",
388 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
390 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
391 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
395 /* Only do the bare minimum to get a valid hdc */
396 hWnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100,0, 0, 0, NULL);
399 SetLastError(0xdeadbeef);
400 hTheme = pOpenThemeDataEx(hWnd, NULL, 0);
401 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
403 ok( GetLastError() == E_POINTER,
404 "Expected GLE() to be E_POINTER, got 0x%08x\n",
407 SetLastError(0xdeadbeef);
408 hTheme = pOpenThemeDataEx(hWnd, szInvalidClassList, 0);
409 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
411 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
412 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
417 SetLastError(0xdeadbeef);
418 hTheme = pOpenThemeDataEx(hWnd, szButtonClassList, 0);
419 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
421 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
422 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
424 skip("No active theme, skipping rest of OpenThemeDataEx tests\n");
428 /* Only do the next checks if we have an active theme */
430 SetLastError(0xdeadbeef);
431 hTheme = pOpenThemeDataEx(hWnd, szButtonClassList, 0);
432 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
434 ok( GetLastError() == ERROR_SUCCESS,
435 "Expected ERROR_SUCCESS, got 0x%08x\n",
438 SetLastError(0xdeadbeef);
439 hTheme = pOpenThemeDataEx(hWnd, szButtonClassList, OTD_FORCE_RECT_SIZING);
440 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
442 ok( GetLastError() == ERROR_SUCCESS,
443 "Expected ERROR_SUCCESS, got 0x%08x\n",
446 SetLastError(0xdeadbeef);
447 hTheme = pOpenThemeDataEx(hWnd, szButtonClassList, OTD_NONCLIENT);
448 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
450 ok( GetLastError() == ERROR_SUCCESS,
451 "Expected ERROR_SUCCESS, got 0x%08x\n",
454 SetLastError(0xdeadbeef);
455 hTheme = pOpenThemeDataEx(hWnd, szButtonClassList, 0x3);
456 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
458 ok( GetLastError() == ERROR_SUCCESS,
459 "Expected ERROR_SUCCESS, got 0x%08x\n",
462 /* Test with bUtToN instead of Button */
463 SetLastError(0xdeadbeef);
464 hTheme = pOpenThemeDataEx(hWnd, szButtonClassList2, 0);
465 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
467 ok( GetLastError() == ERROR_SUCCESS,
468 "Expected ERROR_SUCCESS, got 0x%08x\n",
471 SetLastError(0xdeadbeef);
472 hTheme = pOpenThemeDataEx(hWnd, szClassList, 0);
473 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
475 ok( GetLastError() == ERROR_SUCCESS,
476 "Expected ERROR_SUCCESS, got 0x%08x\n",
479 bDestroyed = DestroyWindow(hWnd);
481 trace("Window %p couldn't be destroyed : 0x%08x\n",
482 hWnd, GetLastError());
485 static void test_GetCurrentThemeName(void)
489 WCHAR currentTheme[MAX_PATH];
490 WCHAR currentColor[MAX_PATH];
491 WCHAR currentSize[MAX_PATH];
493 bThemeActive = pIsThemeActive();
496 SetLastError(0xdeadbeef);
497 hRes = pGetCurrentThemeName(NULL, 0, NULL, 0, NULL, 0);
499 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
501 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
502 ok( GetLastError() == 0xdeadbeef,
503 "Expected 0xdeadbeef, got 0x%08x\n",
506 /* Number of characters given is 0 */
507 SetLastError(0xdeadbeef);
508 hRes = pGetCurrentThemeName(currentTheme, 0, NULL, 0, NULL, 0);
510 ok( hRes == S_OK || broken(hRes == E_FAIL /* WinXP SP1 */), "Expected S_OK, got 0x%08x\n", hRes);
512 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
513 ok( GetLastError() == 0xdeadbeef,
514 "Expected 0xdeadbeef, got 0x%08x\n",
517 SetLastError(0xdeadbeef);
518 hRes = pGetCurrentThemeName(currentTheme, 2, NULL, 0, NULL, 0);
521 ok(hRes == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) ||
522 broken(hRes == E_FAIL /* WinXP SP1 */),
523 "Expected HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), got 0x%08x\n", hRes);
525 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
526 ok( GetLastError() == 0xdeadbeef,
527 "Expected 0xdeadbeef, got 0x%08x\n",
530 /* The same is true if the number of characters is too small for Color and/or Size */
531 SetLastError(0xdeadbeef);
532 hRes = pGetCurrentThemeName(currentTheme, sizeof(currentTheme) / sizeof(WCHAR),
534 currentSize, sizeof(currentSize) / sizeof(WCHAR));
537 ok(hRes == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) ||
538 broken(hRes == E_FAIL /* WinXP SP1 */),
539 "Expected HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), got 0x%08x\n", hRes);
541 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
542 ok( GetLastError() == 0xdeadbeef,
543 "Expected 0xdeadbeef, got 0x%08x\n",
546 /* Given number of characters is correct */
547 SetLastError(0xdeadbeef);
548 hRes = pGetCurrentThemeName(currentTheme, sizeof(currentTheme) / sizeof(WCHAR), NULL, 0, NULL, 0);
550 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
552 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
553 ok( GetLastError() == 0xdeadbeef,
554 "Expected 0xdeadbeef, got 0x%08x\n",
557 /* Given number of characters for the theme name is too large */
558 SetLastError(0xdeadbeef);
559 hRes = pGetCurrentThemeName(currentTheme, sizeof(currentTheme), NULL, 0, NULL, 0);
561 ok( hRes == E_POINTER || hRes == S_OK, "Expected E_POINTER or S_OK, got 0x%08x\n", hRes);
563 ok( hRes == E_PROP_ID_UNSUPPORTED ||
564 hRes == E_POINTER, /* win2k3 */
565 "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
566 ok( GetLastError() == 0xdeadbeef,
567 "Expected 0xdeadbeef, got 0x%08x\n",
570 /* The too large case is only for the theme name, not for color name or size name */
571 SetLastError(0xdeadbeef);
572 hRes = pGetCurrentThemeName(currentTheme, sizeof(currentTheme) / sizeof(WCHAR),
573 currentColor, sizeof(currentTheme),
574 currentSize, sizeof(currentSize) / sizeof(WCHAR));
576 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
578 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
579 ok( GetLastError() == 0xdeadbeef,
580 "Expected 0xdeadbeef, got 0x%08x\n",
583 SetLastError(0xdeadbeef);
584 hRes = pGetCurrentThemeName(currentTheme, sizeof(currentTheme) / sizeof(WCHAR),
585 currentColor, sizeof(currentTheme) / sizeof(WCHAR),
586 currentSize, sizeof(currentSize));
588 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
590 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
591 ok( GetLastError() == 0xdeadbeef,
592 "Expected 0xdeadbeef, got 0x%08x\n",
596 SetLastError(0xdeadbeef);
597 hRes = pGetCurrentThemeName(currentTheme, sizeof(currentTheme) / sizeof(WCHAR),
598 currentColor, sizeof(currentColor) / sizeof(WCHAR),
599 currentSize, sizeof(currentSize) / sizeof(WCHAR));
601 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
603 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
604 ok( GetLastError() == 0xdeadbeef,
605 "Expected 0xdeadbeef, got 0x%08x\n",
609 static void test_CloseThemeData(void)
613 SetLastError(0xdeadbeef);
614 hRes = pCloseThemeData(NULL);
615 ok( hRes == E_HANDLE, "Expected E_HANDLE, got 0x%08x\n", hRes);
616 ok( GetLastError() == 0xdeadbeef,
617 "Expected 0xdeadbeef, got 0x%08x\n",
623 if(!InitFunctionPtrs())
626 /* No real functional tests will be done (yet). The current tests
627 * only show input/return behaviour
630 /* IsThemeActive, IsAppThemed and IsThemePartDefined*/
631 trace("Starting test_IsThemed()\n");
635 trace("Starting test_GetWindowTheme()\n");
636 test_GetWindowTheme();
639 trace("Starting test_SetWindowTheme()\n");
640 test_SetWindowTheme();
642 /* OpenThemeData, a bit more functional now */
643 trace("Starting test_OpenThemeData()\n");
644 test_OpenThemeData();
646 /* OpenThemeDataEx */
647 trace("Starting test_OpenThemeDataEx()\n");
648 test_OpenThemeDataEx();
650 /* GetCurrentThemeName */
651 trace("Starting test_GetCurrentThemeName()\n");
652 test_GetCurrentThemeName();
655 trace("Starting test_CloseThemeData()\n");
656 test_CloseThemeData();
658 FreeLibrary(hUxtheme);