26#define WIN32_NO_STATUS
41#define NUMCLASSWORDS 4
43#define IS_WNDPROC_HANDLE(x) (((ULONG_PTR)(x) >> 16) == (~0u >> 16))
47#elif defined __aarch64__ || defined__arm64ec__
49#elif defined __x86_64__
60"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"
61"<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">\n"
64" name=\"Wine.User32.Tests\"\n"
65" version=\"1.0.0.0\"\n"
66" processorArchitecture=\"" ARCH "\"\n"
68"<description>Wine comctl32 test suite</description>\n"
70" <dependentAssembly>\n"
73" name=\"microsoft.windows.common-controls\"\n"
74" version=\"6.0.0.0\"\n"
75" processorArchitecture=\"" ARCH "\"\n"
76" publicKeyToken=\"6595b64144ccf1df\"\n"
79"</dependentAssembly>\n"
100 static const WCHAR className[] = {
'T',
'e',
's',
't',
'C',
'l',
'a',
's',
's',0};
101 static const WCHAR winName[] = {
'W',
'i',
'n',
'C',
'l',
'a',
's',
's',
'T',
'e',
's',
't',0};
125 ok(classatom,
"failed to register class\n");
130 "RegisterClass of the same class should fail for the second time\n");
139 ok(hTestWnd != 0,
"Failed to create window for hInstance %p\n", hInstance2);
142 "Wrong GCL instance %p != %p\n",
145 "Wrong GWL instance %p != %p\n",
158 ok(hTestWnd!=0,
"Failed to create window\n");
161 "Wrong GCL instance %p/%p\n",
164 "Wrong GWL instance %p/%p\n",
173 "GetClassLongW initial value nonzero!\n");
175 "GetClassLongW failed!\n");
187 "GetClassLongW() with invalid offset did not fail\n");
195 "GetClassLongW(%ld) initial value nonzero!\n",
i);
197 "SetClassLongW(%ld) failed!\n",
i);
205 "GetClassLongW value doesn't match what was set!\n");
207 "GetClassLongW failed!\n");
213 "GetClassName returned incorrect length\n");
215 "GetClassName returned incorrect name for this window's class\n");
220 ok(test_atom == classatom,
221 "class atom did not match\n");
223 "cbClsExtra did not match\n");
225 "cbWndExtra did not match\n");
227 "hbrBackground did not match\n");
229 "hCursor did not match\n");
231 "hInstance did not match\n");
234 ok(
FALSE,
"GetClassInfo (hinstance) failed!\n");
241 ok(test_atom == classatom,
242 "class atom did not match %x != %x\n", test_atom, classatom);
252 "hInstance not zero for global class %p\n",wc.
hInstance);
255 ok(
FALSE,
"GetClassInfo (0) failed for global class!\n");
260 "GetClassInfo (0) succeeded for local class!\n");
264 "Unregister class succeeded with window existing\n");
267 "DestroyWindow() failed!\n");
270 "UnregisterClass() failed\n");
273 "atom still found\n");
283 ok( !(~wc.
style &
style & ~ignore),
"System class %s is missing bits %x (%08x/%08x)\n",
285 ok( !(wc.
style & ~
style),
"System class %s has extra bits %x (%08x/%08x)\n",
289 ok( !must_exist,
"System class %s does not exist\n",
name );
317 ok_(__FILE__,
line)( atom,
"Class %s %p not found\n",
name, inst );
322 "Wrong name %s/%s for class %s %p\n",
329#define check_class(inst,name,menu) check_class_(__LINE__,inst,name,menu)
338 ok_(__FILE__,
line)( wc.
hInstance == info_inst,
"Wrong info instance %p/%p for class %s\n",
340 hwnd =
CreateWindowExA( 0,
name,
"test_window", 0, 0, 0, 0, 0, 0, 0, inst, 0 );
341 ok_(__FILE__,
line)(
hwnd !=
NULL,
"Couldn't create window for class %s inst %p\n",
name, inst );
343 "Wrong GCL instance %p/%p for class %s\n",
346 "Wrong GWL instance %p/%p for window %s\n",
349 "UnregisterClassA should fail while exists a class window\n");
351 "GetLastError() should be set to ERROR_CLASS_HAS_WINDOWS not %ld\n",
GetLastError());
354#define check_instance(name,inst,info_inst,gcl_inst) check_instance_(__LINE__,name,inst,info_inst,gcl_inst)
394 const char *
name =
"__test__";
402 memset( &cls, 0,
sizeof(cls) );
412 ok(
RegisterClassA( &cls ),
"Failed to register local class for main module\n" );
419 ok(
RegisterClassA( &cls ),
"Failed to register local class for kernel32\n" );
430 wcexA.
cbSize =
sizeof(wcexA) - 1;
432 "Succeeded with invalid number of cbSize bytes\n");
434 wcexA.
cbSize =
sizeof(wcexA) + 1;
436 "Succeeded with invalid number of cbSize bytes\n");
438 wcexA.
cbSize =
sizeof(wcexA);
440 wcexA.
cbSize = 0xdeadbeef;
442 ok( wcexA.
cbSize == 0xdeadbeef,
"GetClassInfoEx returned wrong cbSize value %d\n", wcexA.
cbSize);
450 "Failed with invalid number of WndExtra bytes\n");
456 "Failed with invalid number of ClsExtra bytes\n");
462 "Failed with invalid number of ClsExtra and cbWndExtra bytes\n");
469 hwnd =
CreateWindowExA( 0,
name,
"test", 0, 0, 0, 0, 0, 0, 0, main_module, 0 );
474 ok(
RegisterClassA( &cls ),
"Failed to register local class for kernel32\n" );
485 ok(
RegisterClassA( &cls ),
"Failed to register local class for kernel32\n" );
494 ok(
RegisterClassA( &cls ),
"Failed to register local class for kernel32\n" );
511 ok(
RegisterClassA( &cls ),
"Failed to register local class for kernel32\n" );
524 ok(
RegisterClassA( &cls ),
"Failed to register local class for deadbeef\n" );
525 hwnd2 =
CreateWindowExA( 0,
name,
"test_window", 0, 0, 0, 0, 0, 0, 0,
NULL, 0 );
527 "Didn't get deadbeef class for null instance\n" );
531 hwnd2 =
CreateWindowExA( 0,
name,
"test_window", 0, 0, 0, 0, 0, 0, 0,
NULL, 0 );
533 "Didn't get kernel32 class for null instance\n" );
537 ok(
r == 3,
"expected 3, got %ld\n",
r );
542 hwnd2 =
CreateWindowExA( 0,
name,
"test_window", 0, 0, 0, 0, 0, 0, 0,
NULL, 0 );
544 "Didn't get 12345678 class for null instance\n" );
553 ok( !
RegisterClassA( &cls ),
"Succeeded registering local class for null instance\n" );
557 ok(
RegisterClassA( &cls ),
"Failed to register local class for null instance\n" );
569 ok( !
RegisterClassA( &cls ),
"Succeeded registering local class for user32\n" );
572 ok( !
RegisterClassA( &cls ),
"Succeeded registering global class for user32\n" );
577 ok(
RegisterClassA( &cls ),
"Failed to register global class for main module\n" );
584 ok(
RegisterClassA( &cls ),
"Failed to register global class for main module\n" );
587 ok( !
RegisterClassA( &cls ),
"Succeeded registering local class for kernel32\n" );
590 hwnd =
CreateWindowExA( 0,
name,
"test", 0, 0, 0, 0, 0, 0, 0, main_module, 0 );
592 ok( !
RegisterClassA( &cls ),
"Succeeded registering local class for kernel32\n" );
617 ok(
RegisterClassA( &cls ),
"Failed to register global class for dummy instance\n" );
631 ok( !
RegisterClassA( &cls ),
"Succeeded registering global button class for main module\n" );
634 ok( !
RegisterClassA( &cls ),
"Succeeded registering global button class for kernel32\n" );
638 cls.
style &= ~CS_GLOBALCLASS;
641 ok(
RegisterClassA( &cls ),
"Failed to register local button class for main module\n" );
642 check_class( main_module,
"BUTTON",
"button_main_module" );
645 ok(
RegisterClassA( &cls ),
"Failed to register local button class for kernel32\n" );
646 check_class( kernel32,
"BUTTON",
"button_kernel32" );
647 check_class( main_module,
"BUTTON",
"button_main_module" );
648 ok(
UnregisterClassA(
"BUTTON", kernel32 ),
"Unregister failed for kernel32 button\n" );
649 ok(
UnregisterClassA(
"BUTTON", main_module ),
"Unregister failed for main module button\n" );
659 ok(
GetClassInfoA( 0,
"BUTTON", &wc ),
"Button class not found with null instance\n" );
660 ok(
GetClassInfoA( kernel32,
"BUTTON", &wc ),
"Button class not found with kernel32\n" );
670 hwnd =
CreateWindowExA( 0,
"EDIT",
"test", 0, 0, 0, 0, 0, 0, 0, main_module, 0 );
680 static const CHAR NORMAL_CLASSES[][10] = {
689 static const char classA[] =
"deftest";
690 static const WCHAR classW[] = {
'd',
'e',
'f',
't',
'e',
's',
't',0};
691 WCHAR unistring[] = {0x142, 0x40e, 0x3b4, 0};
692 WNDPROC pDefWindowProcA, pDefWindowProcW;
716 "Windows should be Unicode\n");
719 ok(
memcmp(
buf, unistring,
sizeof(unistring)) == 0,
"WM_GETTEXT invalid return\n");
721 ok(
memcmp(
buf, unistring,
sizeof(unistring)) != 0,
"WM_GETTEXT invalid return\n");
767 ok(
hwnd !=
NULL,
"Couldn't create window of class %s\n", NORMAL_CLASSES[
i]);
771 ok(!
IS_WNDPROC_HANDLE(procA),
"procA should not be a handle for %s (%p)\n", NORMAL_CLASSES[
i], procA);
772 ok(!
IS_WNDPROC_HANDLE(procW),
"procW should not be a handle for %s (%p)\n", NORMAL_CLASSES[
i], procW);
774 ok(
memcmp(
buf, classA,
sizeof(classA)) == 0,
"WM_GETTEXT A/A invalid return for class %s\n", NORMAL_CLASSES[
i]);
778 ok(
memcmp(
buf, classA,
sizeof(classA)) == 0,
"WM_GETTEXT W/A invalid return for class %s\n", NORMAL_CLASSES[
i]);
799 ok(
memcmp(
buf, unistring,
sizeof(unistring)) == 0,
"WM_GETTEXT invalid return\n");
801 ok(
memcmp(
buf, unistring,
sizeof(unistring)) == 0,
"WM_GETTEXT invalid return\n");
803 ok(
memcmp(
buf, unistring,
sizeof(unistring)) == 0,
"WM_GETTEXT invalid return\n");
807 ok(
memcmp(
buf, classA,
sizeof(classA)) == 0,
"WM_GETTEXT invalid return\n");
816 ok(
memcmp(
buf, classA,
sizeof(classA)) == 0,
"WM_GETTEXT invalid return\n");
818 ok(
memcmp(
buf, classA,
sizeof(classA)) == 0,
"WM_GETTEXT invalid return\n");
820 ok(
memcmp(
buf, classA,
sizeof(classA)) == 0,
"WM_GETTEXT invalid return\n");
839 ok(
memcmp(
buf, classA,
sizeof(classA)) == 0,
"WM_GETTEXT invalid return\n");
841 ok(
memcmp(
buf, classA,
sizeof(classA)) == 0,
"WM_GETTEXT invalid return\n");
843 ok(
memcmp(
buf, classA,
sizeof(classA)) == 0,
"WM_GETTEXT invalid return\n");
851 ok(
memcmp(
buf, unistring,
sizeof(unistring)) == 0,
"WM_GETTEXT invalid return\n");
853 ok(
memcmp(
buf, unistring,
sizeof(unistring)) == 0,
"WM_GETTEXT invalid return\n");
855 ok(
memcmp(
buf, unistring,
sizeof(unistring)) == 0,
"WM_GETTEXT invalid return\n");
859 ok(
memcmp(
buf, classA,
sizeof(classA)) == 0,
"WM_GETTEXT invalid return\n");
869 static const char *classes[] =
892 const UINT64 *ptr_A, *ptr_W, *ptr_workers;
896 if (!pRtlRetrieveNtUserPfn || pRtlRetrieveNtUserPfn( &ptr_A, &ptr_W, &ptr_workers ))
898 win_skip(
"RtlRetrieveNtUserPfn not supported\n" );
917 const void **ptr_A32 = (
const void **)ptr_A, **ptr_W32 = (
const void **)ptr_W;
920 ok( !procsA[
i] || procsA[
i] == ptr_A32[
i],
921 "wrong ptr A %u %s: %p / %p\n",
i, classes[
i], procsA[
i], ptr_A32[
i] );
922 ok( !procsW[
i] || procsW[
i] == ptr_W32[
i] ||
924 "wrong ptr W %u %s: %p / %p\n",
i, classes[
i], procsW[
i], ptr_W32[
i] );
932 "wrong ptr A %u %s: %p / %I64x\n",
i, classes[
i], procsA[
i], ptr_A[
i] );
935 "wrong ptr W %u %s: %p / %I64x\n",
i, classes[
i], procsW[
i], ptr_W[
i] );
963 ordinals = (
WORD *)(
base +
exp->AddressOfNameOrdinals);
964 for (
i = 0;
i <
exp->NumberOfNames;
i++)
967 const char *forward =
base + functions[ordinals[
i]];
973 if (!
strcmp(
name,
"DefDlgProcA" ) && !(forward >= (
char *)
exp && forward < (
char *)
exp +
size))
975 win_skip(
"Windows version too old, not using forwards\n" );
981 ok( forward >= (
char *)
exp && forward < (
char *)
exp +
size,
982 "not a forward %s %lx\n",
name, functions[ordinals[
i]] );
983 ok( !
strncmp( forward,
"NTDLL.Ntdll", 11 ),
"wrong forward %s -> %s\n",
name, forward );
991 base = (
char *)user32;
996 ordinals = (
WORD *)(
base +
exp->AddressOfNameOrdinals);
997 for (
i = 0;
i <
exp->NumberOfNames;
i++)
1000 const char *forward =
base + functions[ordinals[
i]];
1007 ok( forward >= (
char *)
exp && forward < (
char *)
exp +
size,
1008 "not a forward %s %lx\n",
name, functions[ordinals[
i]] );
1009 ok( !
strncmp( forward,
"NTDLL.Ntdll", 11 ),
"wrong forward %s -> %s\n",
name, forward );
1014 ok( !(forward >= (
char *)
exp && forward < (
char *)
exp +
size),
1015 "%s %lx is a forward\n",
name, functions[ordinals[
i]] );
1018 "wrong function %s %p / %p\n",
name, forward,
expect );
1035 wcx.
cbSize =
sizeof(wcx);
1050 ok(atom != 0,
"RegisterClassEx returned 0\n");
1098 static const WCHAR staticW[] = {
's',
't',
'a',
't',
'i',
'c',0};
1117 wcx.
cbSize =
sizeof(wcx);
1124 ok(!
ret,
"GetClassInfoExA() should fail\n");
1131 ok(!
ret,
"GetClassInfoExW() should fail\n");
1146 wcx.
cbSize =
sizeof(wcx) - 1;
1151 ok(wcx.
cbSize ==
sizeof(wcx) - 1,
"expected sizeof(wcx)-1, got %u\n", wcx.
cbSize);
1154 wcx.
cbSize =
sizeof(wcx) + 1;
1159 ok(wcx.
cbSize ==
sizeof(wcx) + 1,
"expected sizeof(wcx)+1, got %u\n", wcx.
cbSize);
1162 wcx.
cbSize =
sizeof(wcx);
1171 WCHAR cls_name[] = {
'I',
'c',
'o',
'n',
'T',
'e',
's',
't',
'C',
'l',
'a',
's',
's',0};
1174 HICON hsmicon, hsmallnew;
1177 memset(&wcex, 0,
sizeof wcex);
1178 wcex.
cbSize =
sizeof wcex;
1186 ok(
hwnd !=
NULL,
"Window was not created\n");
1189 ok(wcex.
hIcon == ret_wcex.
hIcon,
"Icons don't match\n");
1190 ok(ret_wcex.
hIconSm !=
NULL,
"hIconSm should be non-zero handle\n");
1193 ok(hsmicon !=
NULL,
"GetClassLong should return non-zero handle\n");
1196 "WM_GETICON with ICON_BIG should not return the class icon\n");
1198 "WM_GETICON with ICON_SMALL should not return the class icon\n");
1200 "WM_GETICON with ICON_SMALL2 should not return the class icon\n");
1205 "Previous hIconSm should be zero\n");
1207 "Should return explicitly assigned small icon\n");
1208 ok(!
GetIconInfo(hsmicon, &icinf),
"Previous small icon should be destroyed\n");
1212 ok( hsmicon !=
NULL,
"GetClassLong should return non-zero handle\n");
1219 ok(hsmicon !=
NULL,
"GetClassLong should return non-zero handle\n");
1221 ok(
GetIconInfo(hsmicon, &icinf),
"Icon should NOT be destroyed\n");
1248 actctx.cbSize =
sizeof(ACTCTXW);
1257 ok(
actctx.wProcessorArchitecture == 0,
"wProcessorArchitecture=%d\n",
actctx.wProcessorArchitecture);
1259 ok(
actctx.lpAssemblyDirectory ==
NULL,
"lpAssemblyDirectory=%p\n",
actctx.lpAssemblyDirectory);
1261 ok(
actctx.lpApplicationName ==
NULL,
"lpApplicationName=%p\n",
actctx.lpApplicationName);
1292 ok( !
module,
"comctl32 already loaded\n" );
1295 ok(
ret,
"Failed to activate context.\n");
1302 win_skip(
"Module loaded during context activation. Skipping tests.\n");
1313 ok(
ret,
"GetClassInfoW failed for %s\n",
name );
1315 ok(
module != 0,
"comctl32 not loaded\n" );
1319 hwnd =
CreateWindowA(
name,
"test",
WS_OVERLAPPEDWINDOW, 0, 0, 10, 10,
NULL,
NULL,
NULL, 0 );
1320 ok(
hwnd != 0,
"failed to create window for %s\n",
name );
1322 ok(
module != 0,
"comctl32 not loaded\n" );
1327 ok(
ret,
"Failed to deactivate context.\n");
1333 ok( !
module,
"comctl32 already loaded\n" );
1339 ok(
ret,
"GetClassInfoW failed for %s\n",
name );
1341 ok(
module != 0,
"comctl32 not loaded\n" );
1344 ok( !
module,
"comctl32 still loaded\n" );
1345 hwnd =
CreateWindowA(
name,
"test",
WS_OVERLAPPEDWINDOW, 0, 0, 10, 10,
NULL,
NULL,
NULL, 0 );
1346 ok(
hwnd != 0,
"failed to create window for %s\n",
name );
1348 ok(
module != 0,
"comctl32 not loaded\n" );
1362 static const char *classes[] =
1398 ok(
CreateProcessA(
NULL,
path_name,
NULL,
NULL,
FALSE, 0,
NULL,
NULL, &
startup, &
info ),
1399 "CreateProcess failed.\n" );
1408 static const WCHAR ime_classW[] = {
'I',
'M',
'E',0};
1419 win_skip(
"BroadcastSystemMessageExA not available, skipping IME class test\n");
1429 ok(
size ==
sizeof(mbi),
"VirtualQuery returned %Id\n",
size);
1430 if (
size ==
sizeof(mbi)) {
1432 ok(
size,
"GetModuleFileName failed\n");
1434 if (*
ptr ==
'\\' || *
ptr ==
'/')
break;
1443 ok(
size ==
sizeof(mbi),
"VirtualQuery returned %Id\n",
size);
1445 ok(
size,
"GetModuleFileName failed\n");
1447 if (*
ptr ==
'\\' || *
ptr ==
'/')
break;
1454 static const char main_manifest[] =
1455 "<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">"
1456 "<assemblyIdentity version=\"4.3.2.1\" name=\"Wine.WndClass.Test\" type=\"win32\" />"
1457 "<file name=\"file.exe\">"
1458 "<windowClass>MyTestClass</windowClass>"
1461 static const char *testclass =
"MyTestClass";
1481 ok(
ret,
"Failed to activate context.\n");
1483 memset(&wc, 0,
sizeof(wc));
1491 ok(!
ret,
"Expected failure.\n");
1494 ok(
class != 0,
"Failed to register class.\n");
1498 ok(
ret,
"Failed to get class info.\n");
1500 hwnd =
CreateWindowExA(0, testclass,
"test", 0, 0, 0, 0, 0, 0, 0,
hinst, 0);
1501 ok(
hwnd !=
NULL,
"Failed to create a window.\n");
1504 ok(hwnd2 ==
hwnd,
"Failed to find test window.\n");
1507 ok(hwnd2 ==
NULL,
"Unexpected find result %p.\n", hwnd2);
1510 ok(
ret,
"Failed to get class name.\n");
1511 ok(!
strcmp(
buff, testclass),
"Unexpected class name.\n");
1514 ok(
ret,
"Failed to get class info.\n");
1517 ok(!
ret,
"Failed to unregister class.\n");
1520 ok(
ret,
"Failed to deactivate context.\n");
1523 ok(!
ret,
"Unexpected ret val %d.\n",
ret);
1526 ok(
ret,
"Failed to get class info.\n");
1529 ok(
ret,
"Failed to get class name.\n");
1530 ok(!
strcmp(
buff, testclass),
"Unexpected class name.\n");
1534 hwnd =
CreateWindowExA(0,
"4.3.2.1!MyTestClass",
"test", 0, 0, 0, 0, 0, 0, 0,
hinst, 0);
1535 ok(
hwnd !=
NULL,
"Failed to create a window.\n");
1538 ok(hwnd2 ==
hwnd,
"Failed to find test window.\n");
1541 ok(hwnd2 ==
NULL,
"Unexpected find result %p.\n", hwnd2);
1546 ok(!
ret,
"Unexpected ret value %d.\n",
ret);
1549 ok(
ret,
"Failed to unregister class.\n");
1554 ok(
class != 0,
"Failed to register class.\n");
1557 ok(
ret,
"Failed to activate context.\n");
1561 ok(
class == 0,
"Expected failure.\n");
1564 ok(
ret,
"Failed to deactivate context.\n");
1567 ok(
ret,
"Failed to unregister class.\n");
1571 ok(
ret,
"Failed to activate context.\n");
1575 ok(
class != 0,
"Failed to register class\n");
1578 ok(
ret,
"Failed to deactivate context.\n");
1581 ok(!
ret,
"Expected failure.\n");
1584 ok(
ret,
"Failed to get class info.\n");
1587 ok(
ret,
"Failed to unregister class.\n");
1592 ok(
class != 0,
"Failed to register class.\n");
1595 ok(
ret,
"Failed to activate context.\n");
1599 ok(
class != 0,
"Failed to register class.\n");
1602 ok(
ret,
"Failed to deactivate context.\n");
1605 ok(
ret,
"Failed to unregister class.\n");
1608 ok(
ret,
"Failed to unregister class.\n");
1615 static const CHAR *class_name =
"test_uxtheme_class";
1617 BOOL dll_loaded, is_theme_active;
1623 memset(&
class, 0,
sizeof(
class));
1624 class.cbSize =
sizeof(
class);
1627 class.lpszClassName = class_name;
1629 ok(atom,
"RegisterClassExA failed, error %lu.\n",
GetLastError());
1632 ok(!dll_loaded,
"Expected comctl32.dll not loaded.\n");
1635 ok(!dll_loaded,
"Expected uxtheme.dll not loaded.\n");
1643 ok(!dll_loaded,
"Expected comctl32.dll not loaded.\n");
1649 ok(!!uxtheme,
"Failed to load uxtheme.dll, error %lu.\n",
GetLastError());
1655 ok(dll_loaded == is_theme_active,
"Expected uxtheme %s when theming is %s.\n",
1656 is_theme_active ?
"loaded" :
"not loaded", is_theme_active ?
"active" :
"inactive");
1664 WCHAR class_name[] =
L"ClassNameTest";
1674 ok(
FALSE,
"FIXME: ReactOS crashes on test_class_name()!\n");
1678 memset(&wcex, 0,
sizeof wcex);
1679 wcex.
cbSize =
sizeof wcex;
1688 ok(
hwnd !=
NULL,
"Window was not created\n");
1697 ok(
res,
"SetClassLongPtrA returned 0\n");
1705 ok(
res,
"SetClassLongPtrW returned 0\n");
1734 trace(
"Class test is incompatible with Win9x implementation, skipping\n");
COMPILER_DEPENDENT_UINT64 UINT64
static void startup(void)
static const WCHAR nameW[]
static LPCWSTR LPCWSTR module_name
#define IMAGE_DIRECTORY_ENTRY_EXPORT
#define ERROR_CALL_NOT_IMPLEMENTED
#define ERROR_INVALID_PARAMETER
#define GetProcAddress(x, y)
#define INVALID_HANDLE_VALUE
#define CreateFileMappingW(a, b, c, d, e, f)
#define RtlImageDirectoryEntryToData
#define FILE_ATTRIBUTE_NORMAL
#define MultiByteToWideChar
VOID WINAPI ReleaseActCtx(IN HANDLE hActCtx)
BOOL WINAPI DeactivateActCtx(IN DWORD dwFlags, IN ULONG_PTR ulCookie)
BOOL WINAPI ActivateActCtx(IN HANDLE hActCtx, OUT PULONG_PTR ulCookie)
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
DWORD WINAPI GetModuleFileNameA(HINSTANCE hModule, LPSTR lpFilename, DWORD nSize)
DWORD WINAPI GetTempPathA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
HANDLE WINAPI CreateActCtxW(PCACTCTXW pActCtx)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessA(const char *app_name, char *cmd_line, SECURITY_ATTRIBUTES *process_attr, SECURITY_ATTRIBUTES *thread_attr, BOOL inherit, DWORD flags, void *env, const char *cur_dir, STARTUPINFOA *startup_info, PROCESS_INFORMATION *info)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
_ACRTIMP int __cdecl strncmp(const char *, const char *, size_t)
static unsigned char buff[32768]
static char * path_name(DOS_FILE *file)
GLdouble GLdouble GLdouble r
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define todo_wine_if(is_todo)
static const char cls_name[]
static void test_wndproc_forwards(void)
static void check_style(const char *name, int must_exist, UINT style, UINT ignore)
static void ClassTest(HINSTANCE hInstance, BOOL global)
static void test_comctl32_classes(void)
static void test_builtinproc(void)
#define IS_WNDPROC_HANDLE(x)
static void test_extra_values(void)
static void test_class_name(void)
static void test_IME(void)
static const struct @1854 extra_values[]
static DWORD WINAPI thread_proc(void *param)
static const char comctl32_manifest[]
static LRESULT WINAPI TestDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
static void test_styles(void)
static BOOL RegisterTestDialog(HINSTANCE hInstance)
static void create_manifest_file(const char *filename, const char *manifest)
static const BOOL is_win64
static void check_instance_(int line, const char *name, HINSTANCE inst, HINSTANCE info_inst, HINSTANCE gcl_inst)
static HANDLE create_test_actctx(const char *file)
static void test_icons(void)
static void check_thread_instance(const char *name, HINSTANCE inst, HINSTANCE info_inst, HINSTANCE gcl_inst)
#define check_class(inst, name, menu)
static void test_actctx_classes(void)
static void test_instances(void)
#define check_instance(name, inst, info_inst, gcl_inst)
static void test_uxtheme(void)
static LRESULT WINAPI ClassTest_WndProc2(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
static void check_class_(int line, HINSTANCE inst, const char *name, const char *menu_name)
static void CreateDialogParamTest(HINSTANCE hInstance)
static void test_GetClassInfo(void)
static void test_ntdll_wndprocs(void)
static LRESULT WINAPI ClassTest_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
static void test_comctl32_class(const char *name)
unsigned __int3264 UINT_PTR
#define MAKEINTRESOURCE(i)
#define WS_OVERLAPPEDWINDOW
#define WC_NATIVEFONTCTLA
#define DATETIMEPICK_CLASSA
#define TOOLBARCLASSNAMEA
int winetest_get_mainargs(char ***pargv)
#define wait_child_process
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
static IsThemeActiveT pIsThemeActive
static const CHAR manifest[]
static const WCHAR classW[]
SIZE_T NTAPI VirtualQuery(IN LPCVOID lpAddress, OUT PMEMORY_BASIC_INFORMATION lpBuffer, IN SIZE_T dwLength)
static const WCHAR staticW[]
DWORD WINAPI GetLastError(void)
#define ERROR_CLASS_HAS_WINDOWS
#define ERROR_CLASS_ALREADY_EXISTS
#define ERROR_CLASS_DOES_NOT_EXIST
HGDIOBJ WINAPI GetStockObject(_In_ int)
#define SetWindowLongPtrA
BOOL WINAPI SetWindowTextA(_In_ HWND, _In_opt_ LPCSTR)
#define GetWindowLongPtrW
HWND WINAPI CreateWindowExA(_In_ DWORD dwExStyle, _In_opt_ LPCSTR lpClassName, _In_opt_ LPCSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI UnregisterClassA(_In_ LPCSTR, HINSTANCE)
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HWND WINAPI CreateDialogParamA(_In_opt_ HINSTANCE, _In_ LPCSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI GetIconInfo(_In_ HICON, _Out_ PICONINFO)
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
int WINAPI GetClassNameA(_In_ HWND hWnd, _Out_writes_to_(nMaxCount, return) LPSTR lpClassName, _In_ int nMaxCount)
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI GetClassInfoExA(_In_opt_ HINSTANCE, _In_ LPCSTR, _Out_ LPWNDCLASSEXA)
#define GetWindowLongPtrA
HWND WINAPI FindWindowExA(_In_opt_ HWND, _In_opt_ HWND, _In_opt_ LPCSTR, _In_opt_ LPCSTR)
BOOL WINAPI GetClassInfoExW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _Out_ LPWNDCLASSEXW)
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
LRESULT WINAPI DefDlgProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HANDLE WINAPI CopyImage(_In_ HANDLE, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
BOOL WINAPI IsWindowUnicode(_In_ HWND)
ATOM WINAPI RegisterClassA(_In_ CONST WNDCLASSA *)
ATOM WINAPI RegisterClassExA(_In_ CONST WNDCLASSEXA *)
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
HICON WINAPI LoadIconA(_In_opt_ HINSTANCE hInstance, _In_ LPCSTR lpIconName)
DWORD WINAPI SetClassLongW(_In_ HWND, _In_ int, _In_ LONG)
ATOM WINAPI RegisterClassExW(_In_ CONST WNDCLASSEXW *)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
BOOL WINAPI GetClassInfoA(_In_opt_ HINSTANCE, _In_ LPCSTR, _Out_ LPWNDCLASSA)
int WINAPI GetClipboardFormatNameW(_In_ UINT format, _Out_writes_(cchMaxCount) LPWSTR lpszFormatName, _In_ int cchMaxCount)
int WINAPI GetClassNameW(_In_ HWND hWnd, _Out_writes_to_(nMaxCount, return) LPWSTR lpClassName, _In_ int nMaxCount)
HANDLE WINAPI LoadImageA(_In_opt_ HINSTANCE hInst, _In_ LPCSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
DWORD WINAPI SetClassLongA(_In_ HWND, _In_ int, _In_ LONG)
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
DWORD WINAPI GetClassLongW(_In_ HWND, _In_ int)
BOOL WINAPI GetClassInfoW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _Out_ LPWNDCLASSW)
#define SetWindowLongPtrW
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI DestroyWindow(_In_ HWND)
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
int WINAPI GetSystemMetrics(_In_ int)
LRESULT WINAPI CallWindowProcA(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HCURSOR WINAPI LoadCursorA(_In_opt_ HINSTANCE, _In_ LPCSTR)
BOOL WINAPI DestroyIcon(_In_ HICON)