From: Robin Dunn Date: Fri, 25 Aug 2006 22:12:07 +0000 (+0000) Subject: Use the width of the widest line (not the first line) for the max X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/543a99218d11c45bddb4aaf72650caacd4b14549 Use the width of the widest line (not the first line) for the max width of the tooltip. Also, don't set a narrower width if the tooltip control already has a wider one. It will automatically adjust smaller if needed based on the \n's in the text. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40829 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/msw/tooltip.cpp b/src/msw/tooltip.cpp index fe6f37ee05..0f3f8558d8 100644 --- a/src/msw/tooltip.cpp +++ b/src/msw/tooltip.cpp @@ -33,6 +33,7 @@ #include "wx/combobox.h" #endif +#include "wx/tokenzr.h" #include "wx/msw/private.h" // include "properly" @@ -326,14 +327,27 @@ void wxToolTip::Add(WXHWND hWnd) wxLogLastError(wxT("SelectObject(hfont)")); } - SIZE sz; - if ( !::GetTextExtentPoint32(hdc, m_text, index, &sz) ) + // find the width of the widest line + int max = 0; + wxStringTokenizer tokenizer(m_text, _T("\n")); + wxString token = tokenizer.GetNextToken(); + while (token.length()) { - wxLogLastError(wxT("GetTextExtentPoint32")); + SIZE sz; + if ( !::GetTextExtentPoint32(hdc, token, token.length(), &sz) ) + { + wxLogLastError(wxT("GetTextExtentPoint32")); + } + if ( sz.cx > max ) + max = sz.cx; + + token = tokenizer.GetNextToken(); } - SendTooltipMessage(GetToolTipCtrl(), TTM_SETMAXTIPWIDTH, - (void *)sz.cx); + // only set a new width if it is bigger than the current setting + if (max > SendTooltipMessage(GetToolTipCtrl(), TTM_GETMAXTIPWIDTH, 0)) + SendTooltipMessage(GetToolTipCtrl(), TTM_SETMAXTIPWIDTH, + (void *)max); } else #endif // comctl32.dll >= 4.70