Windows黄色工具提示多行?

是否有可能使Windows多行黄色工具提示

http://img830.imageshack.us/img830/6117/tooltip.gif

我尝试了\n但它不工作。

编辑:

这是我在我的代码中的function。 我遵循MSDN的指示,但不能得到它的工作(看评论:/ / // Multiline tooltip )。

 void CreateToolTipForRect(HWND hwndParent) { if (!bCanCreateToolTips) return; // Get list of areas we want tooltips on NSUI::TButton* tbt; tbt = gUserInterface->buttonList; HWND hwndTT; // Array to store all tooltip texts static char string[100][ RM_SCROLLTEXT_MAXLEN + 2 ]; // Go through the list while (tbt != NULL) { // Check id there is a tooltip text defined for this area int sid = GetResourceIdFromButtonId(tbt->id); if (sid == -1) { tbt = tbt->next; continue; } if (!ttwnd[tbt->id]) { // Create a ToolTip. hwndTT = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwndParent, NULL, (( QunicApp * )CQMainGetApp())->CQWinApp_GetHInst(),NULL); ttwnd[tbt->id] = hwndTT; SetWindowPos(hwndTT, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); // Get tooltip from resources int res = LoadString((( QunicApp * )CQMainGetApp())->CQWinApp_GetHInst(), sid, string[tbt->id], RM_SCROLLTEXT_MAXLEN ); } // Set up "tool" information. TOOLINFO ti = { 0 }; ti.cbSize = sizeof(TOOLINFO); ti.uFlags = TTF_SUBCLASS; ti.hwnd = hwndParent; ti.hinst = (( QunicApp * )CQMainGetApp())->CQWinApp_GetHInst(); ti.lpszText = string[tbt->id]; // Set area ti.rect.left = tbt->tx; ti.rect.right = tbt->bx; ti.rect.top = tbt->ty; ti.rect.bottom = tbt->by; // Associate the ToolTip with the "tool" window. SendMessage(ttwnd[tbt->id], TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); // Multiline tooltip - Ilija tried with this /*LPNMTTDISPINFO pInfo = (LPNMTTDISPINFO)tbt; SendMessage(pInfo->hdr.hwndFrom, TTM_SETMAXTIPWIDTH, 0, 150);*/ tbt = tbt->next; } // Extra one, area or button is not known yet // Create a ToolTip. hwndTT = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwndParent, NULL, (( QunicApp * )CQMainGetApp())->CQWinApp_GetHInst(),NULL); SetWindowPos(hwndTT, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); // Set up "tool" information. TOOLINFO ti = { 0 }; ti.cbSize = sizeof(TOOLINFO); ti.uFlags = TTF_SUBCLASS; ti.hwnd = hwndParent; ti.hinst = (( QunicApp * )CQMainGetApp())->CQWinApp_GetHInst(); // Get tooltip from resources int res = LoadString( ti.hinst, IDS_PREVIEW, string[99], RM_SCROLLTEXT_MAXLEN ); ti.lpszText = string[99]; // Set area ti.rect.left = 7; ti.rect.right = 104; ti.rect.top = 131; ti.rect.bottom = 145; // Associate the ToolTip with the "tool" window. SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti); } 

谢谢,
伊利亚·

有3种工具提示。 您的屏幕截图显示了一个跟踪工具提示。 然后有一个多行工具提示,发送TTM_SETMAXTIPWIDTH并响应TTN_GETDISPINFO。 并有气球工具提示,指定TTS_BALLOON窗口样式标志。 后两个适合你的账单。

在他们的SDK文章中有很好的代码示例。

您可以使用以下技巧强制标准工具提示控制执行多行:

在您的TTN_NEEDTEXT处理程序中:

 // force multi-line tool tips ::SendMessage(pNMHDR->hwndFrom, TTM_SETMAXTIPWIDTH, 0, kToolTipWidth); 

无论如何,通过设置宽度,然后我可以绘制muiltiline提示:

 pToolTipText->lpszText = _T("blah blah blah\r\nmore blah blah\r\nline 3 of blah"); 

其中kToolTipWidth是一些有用的最大宽度,比如600-800。

奇怪的是,我不得不在TTN_NEEDTEXT处理程序中重新发布此消息,而不仅仅是在创建窗口时。 在我们的MFC应用程序中,MFC使用每个线程的全局工具提示控件,这在每次创建新对话时都可能重置为默认值。 所以对于一个非MFC的应用程序,你可能只需要初始化一次。

请享用!

Windows使用\r\n换行符。 试试吧,它应该工作。 请参阅MSDN 。

我发现\ n适用于正常的工具提示,但\ n和\ r \ n都不适用于工具提示。 我不使用Unicode。