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
This commit is contained in:
@@ -33,6 +33,7 @@
|
||||
#include "wx/combobox.h"
|
||||
#endif
|
||||
|
||||
#include "wx/tokenzr.h"
|
||||
#include "wx/msw/private.h"
|
||||
|
||||
// include <commctrl.h> "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
|
||||
|
Reference in New Issue
Block a user