3d656fd99361dd523ebb5397ad57361f888026cc
2 * PROJECT: ReactOS API tests
3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Test for SetProp
5 * PROGRAMMERS: Thomas Faber <thomas.faber@reactos.org>
10 static ATOM Atom1
, Atom2
, Atom3
;
17 _In_ PCWSTR lpszString
,
20 if (HIWORD(lpszString
))
21 ok(0, "Unexpected EnumFunc call: %p, '%ls', %p\n", hWnd
, lpszString
, hData
);
23 ok(0, "Unexpected EnumFunc call: %p, 0x%04x, %p\n", hWnd
, (USHORT
)(ULONG_PTR
)lpszString
, hData
);
32 _In_ PWSTR lpszString
,
34 _In_ ULONG_PTR dwData
)
38 if (HIWORD(lpszString
))
39 ok(0, "Unexpected EnumFuncEx call: %p, '%ls', %p\n", hWnd
, lpszString
, hData
);
41 ok(0, "Unexpected EnumFuncEx call: %p, 0x%04x, %p\n", hWnd
, (USHORT
)(ULONG_PTR
)lpszString
, hData
);
45 if (HIWORD(lpszString
))
47 if (!wcscmp(lpszString
, L
"PropTestAtom1"))
48 ok(hData
== &Atom1
, "EnumFuncEx: %p, '%ls', %p; expected %p\n", hWnd
, lpszString
, hData
, &Atom1
);
49 else if (!wcscmp(lpszString
, L
"PropTestAtom2"))
50 ok(hData
== &Atom2
, "EnumFuncEx: %p, '%ls', %p; expected %p\n", hWnd
, lpszString
, hData
, &Atom2
);
52 ok(0, "Unexpected EnumFuncEx call: %p, '%ls', %p\n", hWnd
, lpszString
, hData
);
55 ok(0, "Unexpected EnumFuncEx call: %p, 0x%04x, %p\n", hWnd
, (USHORT
)(ULONG_PTR
)lpszString
, hData
);
72 Atom1
= GlobalAddAtomW(L
"PropTestAtom1");
73 ok(Atom1
!= 0, "PropTestAtom1 is 0x%04x\n", Atom1
);
74 ok(Atom1
>= 0xc000, "PropTestAtom1 is 0x%04x\n", Atom1
);
75 ok(Atom1
>= 0xc018, "PropTestAtom1 is 0x%04x\n", Atom1
);
77 /* These are not in the global atom table */
78 Atom
= GlobalFindAtomW(L
"SysIC");
79 ok(Atom
== 0, "SysIC atom is 0x%04x\n", Atom
);
80 Atom
= GlobalFindAtomW(L
"SysICS");
81 ok(Atom
== 0, "SysICS atom is 0x%04x\n", Atom
);
85 RegisterSimpleClass(DefWindowProcW
, L
"PropTest");
87 hWnd
= CreateWindowExW(0, L
"PropTest", NULL
, 0, 10, 10, 20, 20, NULL
, NULL
, 0, NULL
);
89 Result
= EnumPropsW(hWnd
, EnumFunc
);
90 if (0) // Windows returns an uninitialized value here
91 ok(Result
== TRUE
, "EnumProps returned %Iu\n", Result
);
92 Result
= EnumPropsExW(hWnd
, EnumFuncEx
, 0);
93 if (0) // Windows returns an uninitialized value here
94 ok(Result
== TRUE
, "EnumPropsEx returned %Iu\n", Result
);
96 Atom2
= GlobalAddAtomW(L
"PropTestAtom2");
97 ok(Atom2
!= 0, "PropTestAtom2 is 0x%04x\n", Atom2
);
98 ok(Atom2
>= 0xc000, "PropTestAtom2 is 0x%04x\n", Atom2
);
99 ok(Atom2
>= 0xc018, "PropTestAtom2 is 0x%04x\n", Atom2
);
101 while (PeekMessage(&msg
, 0, 0, 0, PM_REMOVE
))
102 DispatchMessageA(&msg
);
104 Result
= EnumPropsExW(hWnd
, EnumFuncEx
, 0);
105 if (0) // Windows returns an uninitialized value here
106 ok(Result
== TRUE
, "EnumPropsEx returned %Iu\n", Result
);
108 Result
= SetPropW(hWnd
, (PCWSTR
)MAKEINTATOM(Atom1
), &Atom1
);
109 ok(Result
== TRUE
, "SetProp returned %Iu\n", Result
);
110 Result
= SetPropW(hWnd
, (PCWSTR
)MAKEINTATOM(Atom2
), &Atom3
);
111 ok(Result
== TRUE
, "SetProp returned %Iu\n", Result
);
112 Prop
= GetPropW(hWnd
, (PCWSTR
)MAKEINTATOM(Atom2
));
113 ok(Prop
== &Atom3
, "GetProp returned %p, expected %p\n", Prop
, &Atom3
);
114 Result
= SetPropW(hWnd
, (PCWSTR
)MAKEINTATOM(Atom2
), &Atom2
);
115 ok(Result
== TRUE
, "SetProp returned %Iu\n", Result
);
116 Prop
= GetPropW(hWnd
, (PCWSTR
)MAKEINTATOM(Atom2
));
117 ok(Prop
== &Atom2
, "GetProp returned %p, expected %p\n", Prop
, &Atom2
);
118 Prop
= GetPropW(hWnd
, L
"PropTestAtom2");
119 ok(Prop
== &Atom2
, "GetProp returned %p, expected %p\n", Prop
, &Atom2
);
120 Prop
= GetPropA(hWnd
, "PropTestAtom2");
121 ok(Prop
== &Atom2
, "GetProp returned %p, expected %p\n", Prop
, &Atom2
);
123 Result
= EnumPropsExW(hWnd
, EnumFuncEx
, 1);
124 ok(Result
== TRUE
, "EnumPropsEx returned %Iu\n", Result
);
126 hIcon
= LoadImageW(NULL
, (PCWSTR
)MAKEINTRESOURCE(OIC_NOTE
), IMAGE_ICON
, 0, 0, LR_DEFAULTSIZE
| LR_SHARED
);
127 ok(hIcon
!= NULL
, "LoadImage failed with %lu\n", GetLastError());
128 /* Should not have any icon */
129 hIcon2
= (HICON
)SendMessageW(hWnd
, WM_GETICON
, ICON_BIG
, 0);
130 ok(hIcon2
== NULL
, "WM_GETICON returned %p, expected NULL\n", hIcon2
);
131 hIcon2
= (HICON
)SendMessageW(hWnd
, WM_GETICON
, ICON_SMALL
, 0);
132 ok(hIcon2
== NULL
, "WM_GETICON returned %p, expected NULL\n", hIcon2
);
134 /* Set big icon, should also set small icon */
135 Result
= SendMessageW(hWnd
, WM_SETICON
, ICON_BIG
, (LPARAM
)hIcon
);
136 ok(Result
== 0, "WM_SETICON returned 0x%Ix\n", Result
);
138 hIcon2
= (HICON
)SendMessageW(hWnd
, WM_GETICON
, ICON_BIG
, 0);
139 ok(hIcon2
== hIcon
, "WM_GETICON returned %p, expected %p\n", hIcon2
, hIcon
);
140 hIcon2
= (HICON
)SendMessageW(hWnd
, WM_GETICON
, ICON_SMALL
, 0);
141 ok(hIcon2
!= hIcon
&& hIcon
!= NULL
, "WM_GETICON returned %p, expected not %p and not NULL\n", hIcon2
, hIcon
);
143 while (PeekMessage(&msg
, 0, 0, 0, PM_REMOVE
))
144 DispatchMessageA(&msg
);
146 /* We should have only the props that we explicitly set */
147 for (Atom
= 0x0000; Atom
<= 0xffff; Atom
++)
149 Prop
= GetPropW(hWnd
, (PCWSTR
)MAKEINTATOM(Atom
));
151 ok(Prop
== &Atom1
, "Window %p Prop 0x%04x = %p, expected %p\n", hWnd
, Atom
, Prop
, &Atom1
);
152 else if (Atom
== Atom2
)
153 ok(Prop
== &Atom2
, "Window %p Prop 0x%04x = %p, expected %p\n", hWnd
, Atom
, Prop
, &Atom2
);
155 ok(Prop
== NULL
, "Window %p Prop 0x%04x = %p\n", hWnd
, Atom
, Prop
);
158 /* In particular we shouldn't see these from WM_SETICON */
159 SysICAtom
= RegisterWindowMessageW(L
"SysIC");
160 Prop
= GetPropW(hWnd
, (PCWSTR
)MAKEINTATOM(SysICAtom
));
161 ok(Prop
== NULL
, "SysIC prop (0x%04x) is %p\n", SysICAtom
, Prop
);
163 SysICSAtom
= RegisterWindowMessageW(L
"SysICS");
164 Prop
= GetPropW(hWnd
, (PCWSTR
)MAKEINTATOM(SysICSAtom
));
165 ok(Prop
== NULL
, "SysICS prop (0x%04x) is %p\n", SysICSAtom
, Prop
);
167 GlobalDeleteAtom(Atom1
);
168 GlobalDeleteAtom(Atom2
);
172 while (PeekMessage(&msg
, 0, 0, 0, PM_REMOVE
))
173 DispatchMessageA(&msg
);