- INT nResult;
-
- if (lpToolInfo == NULL)
- return FALSE;
- if (lpToolInfo->cbSize < TTTOOLINFOW_V1_SIZE)
- return FALSE;
-
- TRACE("add tool (%p) %p %ld%s!\n",
- infoPtr->hwndSelf, lpToolInfo->hwnd, lpToolInfo->uId,
- (lpToolInfo->uFlags & TTF_IDISHWND) ? " TTF_IDISHWND" : "");
-
- if (infoPtr->uNumTools == 0) {
- infoPtr->tools = Alloc (sizeof(TTTOOL_INFO));
- toolPtr = infoPtr->tools;
- }
- else {
- TTTOOL_INFO *oldTools = infoPtr->tools;
- infoPtr->tools =
- Alloc (sizeof(TTTOOL_INFO) * (infoPtr->uNumTools + 1));
- memcpy (infoPtr->tools, oldTools,
- infoPtr->uNumTools * sizeof(TTTOOL_INFO));
- Free (oldTools);
- toolPtr = &infoPtr->tools[infoPtr->uNumTools];
- }
-
- infoPtr->uNumTools++;
-
- /* copy tool data */
- toolPtr->uFlags = lpToolInfo->uFlags;
- toolPtr->hwnd = lpToolInfo->hwnd;
- toolPtr->uId = lpToolInfo->uId;
- toolPtr->rect = lpToolInfo->rect;
- toolPtr->hinst = lpToolInfo->hinst;
-
- if (IS_INTRESOURCE(lpToolInfo->lpszText)) {
- TRACE("add string id %x\n", LOWORD(lpToolInfo->lpszText));
- toolPtr->lpszText = lpToolInfo->lpszText;
- }
- else if (lpToolInfo->lpszText) {
- if (lpToolInfo->lpszText == LPSTR_TEXTCALLBACKW) {
- TRACE("add CALLBACK!\n");
- toolPtr->lpszText = LPSTR_TEXTCALLBACKW;
- }
- else {
- INT len = lstrlenW (lpToolInfo->lpszText);
- TRACE("add text %s!\n",
- debugstr_w(lpToolInfo->lpszText));
- toolPtr->lpszText = Alloc ((len + 1)*sizeof(WCHAR));
- strcpyW (toolPtr->lpszText, lpToolInfo->lpszText);
- }
- }
-
- if (lpToolInfo->cbSize >= sizeof(TTTOOLINFOW))
- toolPtr->lParam = lpToolInfo->lParam;
-
- /* install subclassing hook */
- if (toolPtr->uFlags & TTF_SUBCLASS) {
- if (toolPtr->uFlags & TTF_IDISHWND) {
- SetWindowSubclass((HWND)toolPtr->uId, TOOLTIPS_SubclassProc, 1,
- (DWORD_PTR)infoPtr->hwndSelf);
- }
- else {
- SetWindowSubclass(toolPtr->hwnd, TOOLTIPS_SubclassProc, 1,
- (DWORD_PTR)infoPtr->hwndSelf);
- }
- TRACE("subclassing installed!\n");
- }
-
- nResult = (INT) SendMessageW (toolPtr->hwnd, WM_NOTIFYFORMAT,
- (WPARAM)infoPtr->hwndSelf, (LPARAM)NF_QUERY);
- if (nResult == NFR_ANSI) {
- toolPtr->bNotifyUnicode = FALSE;
- TRACE(" -- WM_NOTIFYFORMAT returns: NFR_ANSI\n");
- } else if (nResult == NFR_UNICODE) {
- toolPtr->bNotifyUnicode = TRUE;
- TRACE(" -- WM_NOTIFYFORMAT returns: NFR_UNICODE\n");
- } else {
- TRACE (" -- WM_NOTIFYFORMAT returns: error!\n");
- }
-
- return TRUE;
-}