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"
|
#include "wx/combobox.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "wx/tokenzr.h"
|
||||||
#include "wx/msw/private.h"
|
#include "wx/msw/private.h"
|
||||||
|
|
||||||
// include <commctrl.h> "properly"
|
// include <commctrl.h> "properly"
|
||||||
@@ -326,14 +327,27 @@ void wxToolTip::Add(WXHWND hWnd)
|
|||||||
wxLogLastError(wxT("SelectObject(hfont)"));
|
wxLogLastError(wxT("SelectObject(hfont)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// find the width of the widest line
|
||||||
|
int max = 0;
|
||||||
|
wxStringTokenizer tokenizer(m_text, _T("\n"));
|
||||||
|
wxString token = tokenizer.GetNextToken();
|
||||||
|
while (token.length())
|
||||||
|
{
|
||||||
SIZE sz;
|
SIZE sz;
|
||||||
if ( !::GetTextExtentPoint32(hdc, m_text, index, &sz) )
|
if ( !::GetTextExtentPoint32(hdc, token, token.length(), &sz) )
|
||||||
{
|
{
|
||||||
wxLogLastError(wxT("GetTextExtentPoint32"));
|
wxLogLastError(wxT("GetTextExtentPoint32"));
|
||||||
}
|
}
|
||||||
|
if ( sz.cx > max )
|
||||||
|
max = sz.cx;
|
||||||
|
|
||||||
|
token = tokenizer.GetNextToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
// only set a new width if it is bigger than the current setting
|
||||||
|
if (max > SendTooltipMessage(GetToolTipCtrl(), TTM_GETMAXTIPWIDTH, 0))
|
||||||
SendTooltipMessage(GetToolTipCtrl(), TTM_SETMAXTIPWIDTH,
|
SendTooltipMessage(GetToolTipCtrl(), TTM_SETMAXTIPWIDTH,
|
||||||
(void *)sz.cx);
|
(void *)max);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif // comctl32.dll >= 4.70
|
#endif // comctl32.dll >= 4.70
|
||||||
|
Reference in New Issue
Block a user