+ else
+ {
+ // check for multiline toopltip
+ int index = m_text.Find(_T('\n'));
+
+ if ( index != wxNOT_FOUND )
+ {
+#if _WIN32_IE >= 0x0300
+ if ( wxTheApp->GetComCtl32Version() >= 470 )
+ {
+ // use TTM_SETMAXWIDTH to make tooltip multiline using the
+ // extent of its first line as max value
+ HFONT hfont = (HFONT)SendTooltipMessage(GetToolTipCtrl(),
+ WM_GETFONT,
+ 0, 0);
+ if ( !hfont )
+ {
+ hfont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
+ if ( !hfont )
+ {
+ wxLogLastError("GetStockObject(DEFAULT_GUI_FONT)");
+ }
+ }
+
+ HDC hdc = CreateCompatibleDC(NULL);
+ if ( !hdc )
+ {
+ wxLogLastError("CreateCompatibleDC(NULL)");
+ }
+
+ if ( !SelectObject(hdc, hfont) )
+ {
+ wxLogLastError("SelectObject(hfont)");
+ }
+
+ SIZE sz;
+ if ( !GetTextExtentPoint(hdc, m_text, index, &sz) )
+ {
+ wxLogLastError("GetTextExtentPoint");
+ }
+
+ DeleteDC(hdc);
+
+ SendTooltipMessage(GetToolTipCtrl(), TTM_SETMAXTIPWIDTH,
+ 0, (void *)sz.cx);
+ }
+#endif // comctl32.dll >= 4.70
+
+ // replace the '\n's with spaces because otherwise they appear as
+ // unprintable characters in the tooltip string
+ m_text.Replace(_T("\n"), _T(" "));
+ }
+ }