2 * Copyright 2005 Dmitry Timoshkov
3 * Copyright 2008 Jason Edmeades
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
24 #include "wine/test.h"
26 #define expect(expected, got) ok(got == expected, "Expected %d, got %d\n", expected, got)
28 static void test_create_tooltip(void)
31 DWORD style
, exp_style
;
33 parent
= CreateWindowEx(0, "static", NULL
, WS_POPUP
,
38 hwnd
= CreateWindowEx(0, TOOLTIPS_CLASS
, NULL
, 0x7fffffff | WS_POPUP
,
40 parent
, NULL
, NULL
, 0);
43 style
= GetWindowLong(hwnd
, GWL_STYLE
);
44 trace("style = %08x\n", style
);
45 exp_style
= 0x7fffffff | WS_POPUP
;
46 exp_style
&= ~(WS_CHILD
| WS_MAXIMIZE
| WS_BORDER
| WS_DLGFRAME
);
47 ok(style
== exp_style
|| broken(style
== (exp_style
| WS_BORDER
)), /* nt4 */
48 "wrong style %08x/%08x\n", style
, exp_style
);
52 hwnd
= CreateWindowEx(0, TOOLTIPS_CLASS
, NULL
, 0,
54 parent
, NULL
, NULL
, 0);
57 style
= GetWindowLong(hwnd
, GWL_STYLE
);
58 trace("style = %08x\n", style
);
59 ok(style
== (WS_POPUP
| WS_CLIPSIBLINGS
| WS_BORDER
),
60 "wrong style %08x\n", style
);
64 DestroyWindow(parent
);
67 /* try to make sure pending X events have been processed before continuing */
68 static void flush_events(int waitTime
)
72 DWORD time
= GetTickCount() + waitTime
;
76 if (MsgWaitForMultipleObjects( 0, NULL
, FALSE
, min(100,diff
), QS_ALLEVENTS
) == WAIT_TIMEOUT
) break;
77 while (PeekMessage( &msg
, 0, 0, 0, PM_REMOVE
)) DispatchMessage( &msg
);
78 diff
= time
- GetTickCount();
83 static LRESULT CD_Result
;
86 #define TEST_CDDS_PREPAINT 0x00000001
87 #define TEST_CDDS_POSTPAINT 0x00000002
88 #define TEST_CDDS_PREERASE 0x00000004
89 #define TEST_CDDS_POSTERASE 0x00000008
90 #define TEST_CDDS_ITEMPREPAINT 0x00000010
91 #define TEST_CDDS_ITEMPOSTPAINT 0x00000020
92 #define TEST_CDDS_ITEMPREERASE 0x00000040
93 #define TEST_CDDS_ITEMPOSTERASE 0x00000080
94 #define TEST_CDDS_SUBITEM 0x00000100
96 static LRESULT CALLBACK
CustomDrawWndProc(HWND hWnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
)
105 if (((NMHDR
*)lParam
)->code
== NM_CUSTOMDRAW
) {
106 NMTTCUSTOMDRAW
*ttcd
= (NMTTCUSTOMDRAW
*) lParam
;
107 ok(ttcd
->nmcd
.hdr
.hwndFrom
== g_hwnd
, "Unexpected hwnd source %p (%p)\n",
108 ttcd
->nmcd
.hdr
.hwndFrom
, g_hwnd
);
109 ok(ttcd
->nmcd
.hdr
.idFrom
== 0x1234ABCD, "Unexpected id %x\n", (int)ttcd
->nmcd
.hdr
.idFrom
);
111 switch (ttcd
->nmcd
.dwDrawStage
) {
112 case CDDS_PREPAINT
: CD_Stages
|= TEST_CDDS_PREPAINT
; break;
113 case CDDS_POSTPAINT
: CD_Stages
|= TEST_CDDS_POSTPAINT
; break;
114 case CDDS_PREERASE
: CD_Stages
|= TEST_CDDS_PREERASE
; break;
115 case CDDS_POSTERASE
: CD_Stages
|= TEST_CDDS_POSTERASE
; break;
116 case CDDS_ITEMPREPAINT
: CD_Stages
|= TEST_CDDS_ITEMPREPAINT
; break;
117 case CDDS_ITEMPOSTPAINT
: CD_Stages
|= TEST_CDDS_ITEMPOSTPAINT
; break;
118 case CDDS_ITEMPREERASE
: CD_Stages
|= TEST_CDDS_ITEMPREERASE
; break;
119 case CDDS_ITEMPOSTERASE
: CD_Stages
|= TEST_CDDS_ITEMPOSTERASE
; break;
120 case CDDS_SUBITEM
: CD_Stages
|= TEST_CDDS_SUBITEM
; break;
121 default: CD_Stages
= -1;
124 if (ttcd
->nmcd
.dwDrawStage
== CDDS_PREPAINT
) return CD_Result
;
129 return DefWindowProcA(hWnd
, msg
, wParam
, lParam
);
135 static void test_customdraw(void) {
137 LRESULT FirstReturnValue
;
139 } expectedResults
[] = {
140 /* Valid notification responses */
141 {CDRF_DODEFAULT
, TEST_CDDS_PREPAINT
},
142 {CDRF_SKIPDEFAULT
, TEST_CDDS_PREPAINT
},
143 {CDRF_NOTIFYPOSTPAINT
, TEST_CDDS_PREPAINT
| TEST_CDDS_POSTPAINT
},
145 /* Invalid notification responses */
146 {CDRF_NOTIFYITEMDRAW
, TEST_CDDS_PREPAINT
},
147 {CDRF_NOTIFYPOSTERASE
, TEST_CDDS_PREPAINT
},
148 {CDRF_NEWFONT
, TEST_CDDS_PREPAINT
}
155 /* Create a class to use the custom draw wndproc */
156 wc
.style
= CS_HREDRAW
| CS_VREDRAW
;
159 wc
.hInstance
= GetModuleHandleA(NULL
);
161 wc
.hCursor
= LoadCursorA(NULL
, IDC_ARROW
);
162 wc
.hbrBackground
= GetSysColorBrush(COLOR_WINDOW
);
163 wc
.lpszMenuName
= NULL
;
164 wc
.lpszClassName
= "CustomDrawClass";
165 wc
.lpfnWndProc
= CustomDrawWndProc
;
168 for (iterationNumber
= 0;
169 iterationNumber
< sizeof(expectedResults
)/sizeof(expectedResults
[0]);
172 HWND parent
, hwndTip
;
174 TOOLINFO toolInfo
= { 0 };
176 /* Create a main window */
177 parent
= CreateWindowEx(0, "CustomDrawClass", NULL
,
178 WS_CAPTION
| WS_SYSMENU
| WS_MINIMIZEBOX
|
179 WS_MAXIMIZEBOX
| WS_VISIBLE
,
182 NULL
, NULL
, NULL
, 0);
183 ok(parent
!= NULL
, "Creation of main window failed\n");
186 ShowWindow(parent
, SW_SHOWNORMAL
);
190 hwndTip
= CreateWindowEx(WS_EX_TOPMOST
, TOOLTIPS_CLASS
,
191 NULL
, TTS_NOPREFIX
| TTS_ALWAYSTIP
,
192 CW_USEDEFAULT
, CW_USEDEFAULT
,
193 CW_USEDEFAULT
, CW_USEDEFAULT
,
194 parent
, NULL
, GetModuleHandleA(NULL
), 0);
195 ok(hwndTip
!= NULL
, "Creation of tooltip window failed\n");
197 /* Set up parms for the wndproc to handle */
199 CD_Result
= expectedResults
[iterationNumber
].FirstReturnValue
;
202 /* Make it topmost, as per the MSDN */
203 SetWindowPos(hwndTip
, HWND_TOPMOST
, 0, 0, 0, 0,
204 SWP_NOMOVE
| SWP_NOSIZE
| SWP_NOACTIVATE
);
207 toolInfo
.cbSize
= TTTOOLINFO_V1_SIZE
;
208 toolInfo
.hwnd
= parent
;
209 toolInfo
.hinst
= GetModuleHandleA(NULL
);
210 toolInfo
.uFlags
= TTF_SUBCLASS
;
211 toolInfo
.uId
= 0x1234ABCD;
212 toolInfo
.lpszText
= (LPSTR
)"This is a test tooltip";
213 toolInfo
.lParam
= 0xdeadbeef;
214 GetClientRect (parent
, &toolInfo
.rect
);
215 lResult
= SendMessage(hwndTip
, TTM_ADDTOOL
, 0, (LPARAM
)&toolInfo
);
216 ok(lResult
, "Adding the tool to the tooltip failed\n");
218 /* Make tooltip appear quickly */
219 SendMessage(hwndTip
, TTM_SETDELAYTIME
, TTDT_INITIAL
, MAKELPARAM(1,0));
221 /* Put cursor inside window, tooltip will appear immediately */
222 GetWindowRect( parent
, &rect
);
223 SetCursorPos( (rect
.left
+ rect
.right
) / 2, (rect
.top
+ rect
.bottom
) / 2 );
228 /* Check CustomDraw results */
229 ok(CD_Stages
== expectedResults
[iterationNumber
].ExpectedCalls
||
230 broken(CD_Stages
== (expectedResults
[iterationNumber
].ExpectedCalls
& ~TEST_CDDS_POSTPAINT
)), /* nt4 */
231 "CustomDraw run %d stages %x, expected %x\n", iterationNumber
, CD_Stages
,
232 expectedResults
[iterationNumber
].ExpectedCalls
);
236 DestroyWindow(hwndTip
);
237 DestroyWindow(parent
);
243 static const CHAR testcallbackA
[] = "callback";
245 static LRESULT WINAPI
parent_wnd_proc(HWND hwnd
, UINT message
, WPARAM wParam
, LPARAM lParam
)
247 if (message
== WM_NOTIFY
&& lParam
)
249 NMTTDISPINFOA
*ttnmdi
= (NMTTDISPINFOA
*)lParam
;
251 if (ttnmdi
->hdr
.code
== TTN_GETDISPINFOA
)
252 lstrcpy(ttnmdi
->lpszText
, testcallbackA
);
255 return DefWindowProcA(hwnd
, message
, wParam
, lParam
);
258 static BOOL
register_parent_wnd_class(void)
263 cls
.lpfnWndProc
= parent_wnd_proc
;
266 cls
.hInstance
= GetModuleHandleA(NULL
);
268 cls
.hCursor
= LoadCursorA(0, IDC_ARROW
);
269 cls
.hbrBackground
= GetStockObject(WHITE_BRUSH
);
270 cls
.lpszMenuName
= NULL
;
271 cls
.lpszClassName
= "Tooltips test parent class";
272 return RegisterClassA(&cls
);
275 static HWND
create_parent_window(void)
277 if (!register_parent_wnd_class())
280 return CreateWindowEx(0, "Tooltips test parent class",
281 "Tooltips test parent window",
282 WS_CAPTION
| WS_SYSMENU
| WS_MINIMIZEBOX
|
283 WS_MAXIMIZEBOX
| WS_VISIBLE
,
285 GetDesktopWindow(), NULL
, GetModuleHandleA(NULL
), NULL
);
288 static void test_gettext(void)
291 TTTOOLINFOA toolinfoA
;
292 TTTOOLINFOW toolinfoW
;
295 WCHAR bufW
[10] = { 0 };
296 static const CHAR testtipA
[] = "testtip";
298 notify
= create_parent_window();
299 ok(notify
!= NULL
, "Expected notification window to be created\n");
301 /* For bug 14790 - lpszText is NULL */
302 hwnd
= CreateWindowExA(0, TOOLTIPS_CLASSA
, NULL
, 0,
304 NULL
, NULL
, NULL
, 0);
307 /* use sizeof(TTTOOLINFOA) instead of TTTOOLINFOA_V1_SIZE so that adding it fails on Win9x */
308 /* otherwise it crashes on the NULL lpszText */
309 toolinfoA
.cbSize
= sizeof(TTTOOLINFOA
);
310 toolinfoA
.hwnd
= NULL
;
311 toolinfoA
.hinst
= GetModuleHandleA(NULL
);
312 toolinfoA
.uFlags
= 0;
313 toolinfoA
.uId
= 0x1234ABCD;
314 toolinfoA
.lpszText
= NULL
;
315 toolinfoA
.lParam
= 0xdeadbeef;
316 GetClientRect(hwnd
, &toolinfoA
.rect
);
317 r
= SendMessageA(hwnd
, TTM_ADDTOOL
, 0, (LPARAM
)&toolinfoA
);
320 toolinfoA
.hwnd
= NULL
;
321 toolinfoA
.uId
= 0x1234ABCD;
322 toolinfoA
.lpszText
= bufA
;
323 SendMessageA(hwnd
, TTM_GETTEXTA
, 0, (LPARAM
)&toolinfoA
);
324 ok(strcmp(toolinfoA
.lpszText
, "") == 0, "lpszText should be an empty string\n");
328 win_skip( "Old comctl32, not testing NULL text\n" );
329 DestroyWindow( hwnd
);
333 /* add another tool with text */
334 toolinfoA
.cbSize
= sizeof(TTTOOLINFOA
);
335 toolinfoA
.hwnd
= NULL
;
336 toolinfoA
.hinst
= GetModuleHandleA(NULL
);
337 toolinfoA
.uFlags
= 0;
338 toolinfoA
.uId
= 0x1235ABCD;
339 strcpy(bufA
, testtipA
);
340 toolinfoA
.lpszText
= bufA
;
341 toolinfoA
.lParam
= 0xdeadbeef;
342 GetClientRect(hwnd
, &toolinfoA
.rect
);
343 r
= SendMessageA(hwnd
, TTM_ADDTOOL
, 0, (LPARAM
)&toolinfoA
);
344 ok(r
, "Adding the tool to the tooltip failed\n");
349 length
= SendMessage(hwnd
, WM_GETTEXTLENGTH
, 0, 0);
350 ok(length
== 0, "Expected 0, got %d\n", length
);
352 toolinfoA
.hwnd
= NULL
;
353 toolinfoA
.uId
= 0x1235ABCD;
354 toolinfoA
.lpszText
= bufA
;
355 SendMessageA(hwnd
, TTM_GETTEXTA
, 0, (LPARAM
)&toolinfoA
);
356 ok(strcmp(toolinfoA
.lpszText
, testtipA
) == 0, "lpszText should be an empty string\n");
358 length
= SendMessage(hwnd
, WM_GETTEXTLENGTH
, 0, 0);
359 ok(length
== 0, "Expected 0, got %d\n", length
);
362 /* add another with callback text */
363 toolinfoA
.cbSize
= sizeof(TTTOOLINFOA
);
364 toolinfoA
.hwnd
= notify
;
365 toolinfoA
.hinst
= GetModuleHandleA(NULL
);
366 toolinfoA
.uFlags
= 0;
367 toolinfoA
.uId
= 0x1236ABCD;
368 toolinfoA
.lpszText
= LPSTR_TEXTCALLBACKA
;
369 toolinfoA
.lParam
= 0xdeadbeef;
370 GetClientRect(hwnd
, &toolinfoA
.rect
);
371 r
= SendMessageA(hwnd
, TTM_ADDTOOL
, 0, (LPARAM
)&toolinfoA
);
372 ok(r
, "Adding the tool to the tooltip failed\n");
375 toolinfoA
.hwnd
= notify
;
376 toolinfoA
.uId
= 0x1236ABCD;
377 toolinfoA
.lpszText
= bufA
;
378 SendMessageA(hwnd
, TTM_GETTEXTA
, 0, (LPARAM
)&toolinfoA
);
379 ok(strcmp(toolinfoA
.lpszText
, testcallbackA
) == 0,
380 "lpszText should be an (%s) string\n", testcallbackA
);
384 DestroyWindow(notify
);
386 SetLastError(0xdeadbeef);
387 hwnd
= CreateWindowExW(0, TOOLTIPS_CLASSW
, NULL
, 0,
389 NULL
, NULL
, NULL
, 0);
391 if (!hwnd
&& GetLastError() == ERROR_CALL_NOT_IMPLEMENTED
) {
392 win_skip("CreateWindowExW is not implemented\n");
398 toolinfoW
.cbSize
= sizeof(TTTOOLINFOW
);
399 toolinfoW
.hwnd
= NULL
;
400 toolinfoW
.hinst
= GetModuleHandleA(NULL
);
401 toolinfoW
.uFlags
= 0;
402 toolinfoW
.uId
= 0x1234ABCD;
403 toolinfoW
.lpszText
= NULL
;
404 toolinfoW
.lParam
= 0xdeadbeef;
405 GetClientRect(hwnd
, &toolinfoW
.rect
);
406 r
= SendMessageW(hwnd
, TTM_ADDTOOL
, 0, (LPARAM
)&toolinfoW
);
407 ok(r
, "Adding the tool to the tooltip failed\n");
409 if (0) /* crashes on NT4 */
411 toolinfoW
.hwnd
= NULL
;
412 toolinfoW
.uId
= 0x1234ABCD;
413 toolinfoW
.lpszText
= bufW
;
414 SendMessageW(hwnd
, TTM_GETTEXTW
, 0, (LPARAM
)&toolinfoW
);
415 ok(toolinfoW
.lpszText
[0] == 0, "lpszText should be an empty string\n");
421 static void test_ttm_gettoolinfo(void)
428 hwnd
= CreateWindowExA(0, TOOLTIPS_CLASSA
, NULL
, 0,
430 NULL
, NULL
, NULL
, 0);
432 ti
.cbSize
= TTTOOLINFOA_V2_SIZE
;
434 ti
.hinst
= GetModuleHandleA(NULL
);
438 ti
.lParam
= 0xdeadbeef;
439 GetClientRect(hwnd
, &ti
.rect
);
440 r
= SendMessageA(hwnd
, TTM_ADDTOOLA
, 0, (LPARAM
)&ti
);
441 ok(r
, "Adding the tool to the tooltip failed\n");
443 ti
.cbSize
= TTTOOLINFOA_V2_SIZE
;
444 ti
.lParam
= 0xaaaaaaaa;
445 r
= SendMessageA(hwnd
, TTM_GETTOOLINFOA
, 0, (LPARAM
)&ti
);
446 ok(r
, "Getting tooltip info failed\n");
447 ok(0xdeadbeef == ti
.lParam
||
448 broken(0xdeadbeef != ti
.lParam
), /* comctl32 < 5.81 */
449 "Expected 0xdeadbeef, got %lx\n", ti
.lParam
);
451 tiW
.cbSize
= TTTOOLINFOW_V2_SIZE
;
453 tiW
.uId
= 0x1234ABCD;
454 tiW
.lParam
= 0xaaaaaaaa;
455 r
= SendMessageA(hwnd
, TTM_GETTOOLINFOW
, 0, (LPARAM
)&tiW
);
456 ok(r
, "Getting tooltip info failed\n");
457 ok(0xdeadbeef == tiW
.lParam
||
458 broken(0xdeadbeef != tiW
.lParam
), /* comctl32 < 5.81 */
459 "Expected 0xdeadbeef, got %lx\n", tiW
.lParam
);
461 ti
.cbSize
= TTTOOLINFOA_V2_SIZE
;
463 ti
.lParam
= 0xaaaaaaaa;
464 SendMessageA(hwnd
, TTM_SETTOOLINFOA
, 0, (LPARAM
)&ti
);
466 ti
.cbSize
= TTTOOLINFOA_V2_SIZE
;
467 ti
.lParam
= 0xdeadbeef;
468 r
= SendMessageA(hwnd
, TTM_GETTOOLINFOA
, 0, (LPARAM
)&ti
);
469 ok(r
, "Getting tooltip info failed\n");
470 ok(0xaaaaaaaa == ti
.lParam
||
471 broken(0xaaaaaaaa != ti
.lParam
), /* comctl32 < 5.81 */
472 "Expected 0xaaaaaaaa, got %lx\n", ti
.lParam
);
476 /* 1. test size parameter validation rules (ansi messages) */
477 hwnd
= CreateWindowExA(0, TOOLTIPS_CLASSA
, NULL
, 0,
479 NULL
, NULL
, NULL
, 0);
481 ti
.cbSize
= TTTOOLINFOA_V1_SIZE
- 1;
483 ti
.hinst
= GetModuleHandleA(NULL
);
487 ti
.lParam
= 0xdeadbeef;
488 GetClientRect(hwnd
, &ti
.rect
);
489 r
= SendMessage(hwnd
, TTM_ADDTOOLA
, 0, (LPARAM
)&ti
);
490 ok(r
, "Adding the tool to the tooltip failed\n");
491 r
= SendMessage(hwnd
, TTM_GETTOOLCOUNT
, 0, 0);
494 ti
.cbSize
= TTTOOLINFOA_V1_SIZE
- 1;
497 SendMessage(hwnd
, TTM_DELTOOLA
, 0, (LPARAM
)&ti
);
498 r
= SendMessage(hwnd
, TTM_GETTOOLCOUNT
, 0, 0);
501 ti
.cbSize
= TTTOOLINFOA_V2_SIZE
- 1;
503 ti
.hinst
= GetModuleHandleA(NULL
);
507 ti
.lParam
= 0xdeadbeef;
508 GetClientRect(hwnd
, &ti
.rect
);
509 r
= SendMessage(hwnd
, TTM_ADDTOOLA
, 0, (LPARAM
)&ti
);
510 ok(r
, "Adding the tool to the tooltip failed\n");
511 r
= SendMessage(hwnd
, TTM_GETTOOLCOUNT
, 0, 0);
514 ti
.cbSize
= TTTOOLINFOA_V2_SIZE
- 1;
517 SendMessage(hwnd
, TTM_DELTOOLA
, 0, (LPARAM
)&ti
);
518 r
= SendMessage(hwnd
, TTM_GETTOOLCOUNT
, 0, 0);
521 ti
.cbSize
= TTTOOLINFOA_V2_SIZE
+ 1;
523 ti
.hinst
= GetModuleHandleA(NULL
);
527 ti
.lParam
= 0xdeadbeef;
528 GetClientRect(hwnd
, &ti
.rect
);
529 r
= SendMessage(hwnd
, TTM_ADDTOOLA
, 0, (LPARAM
)&ti
);
530 ok(r
, "Adding the tool to the tooltip failed\n");
531 r
= SendMessage(hwnd
, TTM_GETTOOLCOUNT
, 0, 0);
534 ti
.cbSize
= TTTOOLINFOA_V2_SIZE
+ 1;
537 SendMessage(hwnd
, TTM_DELTOOLA
, 0, (LPARAM
)&ti
);
538 r
= SendMessage(hwnd
, TTM_GETTOOLCOUNT
, 0, 0);
543 /* 2. test size parameter validation rules (w-messages) */
544 hwnd
= CreateWindowExW(0, TOOLTIPS_CLASSW
, NULL
, 0,
546 NULL
, NULL
, NULL
, 0);
549 win_skip("CreateWindowExW() not supported. Skipping.\n");
553 tiW
.cbSize
= TTTOOLINFOW_V1_SIZE
- 1;
555 tiW
.hinst
= GetModuleHandleA(NULL
);
557 tiW
.uId
= 0x1234ABCD;
559 tiW
.lParam
= 0xdeadbeef;
560 GetClientRect(hwnd
, &tiW
.rect
);
561 r
= SendMessageW(hwnd
, TTM_ADDTOOLW
, 0, (LPARAM
)&tiW
);
562 ok(r
, "Adding the tool to the tooltip failed\n");
563 r
= SendMessageW(hwnd
, TTM_GETTOOLCOUNT
, 0, 0);
566 tiW
.cbSize
= TTTOOLINFOW_V1_SIZE
- 1;
568 tiW
.uId
= 0x1234ABCD;
569 SendMessageW(hwnd
, TTM_DELTOOLW
, 0, (LPARAM
)&tiW
);
570 r
= SendMessageW(hwnd
, TTM_GETTOOLCOUNT
, 0, 0);
573 tiW
.cbSize
= TTTOOLINFOW_V2_SIZE
- 1;
575 tiW
.hinst
= GetModuleHandleA(NULL
);
577 tiW
.uId
= 0x1234ABCD;
579 tiW
.lParam
= 0xdeadbeef;
580 GetClientRect(hwnd
, &tiW
.rect
);
581 r
= SendMessageW(hwnd
, TTM_ADDTOOLW
, 0, (LPARAM
)&tiW
);
582 ok(r
, "Adding the tool to the tooltip failed\n");
583 r
= SendMessageW(hwnd
, TTM_GETTOOLCOUNT
, 0, 0);
586 tiW
.cbSize
= TTTOOLINFOW_V2_SIZE
- 1;
588 tiW
.uId
= 0x1234ABCD;
589 SendMessageW(hwnd
, TTM_DELTOOLW
, 0, (LPARAM
)&tiW
);
590 r
= SendMessageW(hwnd
, TTM_GETTOOLCOUNT
, 0, 0);
593 tiW
.cbSize
= TTTOOLINFOW_V2_SIZE
+ 1;
595 tiW
.hinst
= GetModuleHandleA(NULL
);
597 tiW
.uId
= 0x1234ABCD;
599 tiW
.lParam
= 0xdeadbeef;
600 GetClientRect(hwnd
, &tiW
.rect
);
601 r
= SendMessageW(hwnd
, TTM_ADDTOOLA
, 0, (LPARAM
)&tiW
);
602 ok(r
, "Adding the tool to the tooltip failed\n");
603 r
= SendMessageW(hwnd
, TTM_GETTOOLCOUNT
, 0, 0);
605 /* looks like TTM_DELTOOLW doesn't work with invalid size */
606 tiW
.cbSize
= TTTOOLINFOW_V2_SIZE
+ 1;
608 tiW
.uId
= 0x1234ABCD;
609 SendMessageW(hwnd
, TTM_DELTOOLW
, 0, (LPARAM
)&tiW
);
610 r
= SendMessageW(hwnd
, TTM_GETTOOLCOUNT
, 0, 0);
613 tiW
.cbSize
= TTTOOLINFOW_V2_SIZE
;
615 tiW
.uId
= 0x1234ABCD;
616 SendMessageW(hwnd
, TTM_DELTOOLW
, 0, (LPARAM
)&tiW
);
617 r
= SendMessageW(hwnd
, TTM_GETTOOLCOUNT
, 0, 0);
625 InitCommonControls();
627 test_create_tooltip();
630 test_ttm_gettoolinfo();