On Fri, 2006-08-25 at 13:00 +0300, Oleg Krylov wrote:
I've been working on the simmilar patch and I want make several comments on the patch
- /* create icon tooltip */
- icon->tooltip = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL,
WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
icon->window, NULL, NULL, NULL);
Why the TTS_NOPREFIX flag is needed? It doesn't seem to be used on windows.
I got that from the example on MSDN, but I don't think it's an absolute must.
Next, we need to set tooltip max width, primarily to enable multiline tooltips, as several applications relay on this. The code can be, just after tooltip creation: SendMessageW (icon->tooltip, TTM_SETMAXTIPWIDTH, 0, 400); On windows width value seem to be dependend on system DPI, but I haven't found the exact formula yet. 400 is value at the default 96 dpi, so it may be a good starting point.
Sounds reasonable to me.
Then my idea is to create tool just after tooltip creation, and then in modify icon just change tooltip text if requested. Not sure if it is a better idea, but it fits better into the existing code. Something like this: after tooltip creation creation: TTTOOLINFOW ti;
ZeroMemory (&ti, sizeof(TTTOOLINFOW)); ti.cbSize = sizeof(TTTOOLINFOW); ti.uFlags = TTF_SUBCLASS; ti.hwnd = icon->window; ti.hinst = 0; ti.uId = 0; ti.lpszText = NULL; GetClientRect (icon->window, &ti.rect); SendMessageW (icon->tooltip, TTM_ADDTOOLW, 0, (LPARAM)&ti);
and in modify icon: if (nid->uFlags & NIF_TIP) { TTTOOLINFOW ti;
ZeroMemory (&ti, sizeof(TTTOOLINFOW)); ti.cbSize = sizeof(TTTOOLINFOW); ti.hwnd = icon->window; ti.hinst = 0; ti.uId = 0; ti.lpszText = nid->szTip; SendMessageW (icon->tooltip, TTM_UPDATETIPTEXTW, 0, (LPARAM)&ti); }
You know, I thought about doing this at first, but I decided against it because it seemed too repetitive. The way I have it now, it's only one function. I may consider doing this though; I haven't decided yet.
Thanks for your feedback, James