X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/311298e064ec6f1f6a52936fccc78efcd6e2ddae..57fd9bb2394e62823417e6068f81a5afdbd47d92:/src/msw/tooltip.cpp?ds=sidebyside diff --git a/src/msw/tooltip.cpp b/src/msw/tooltip.cpp index 28bafa0c16..8c50c9bd3e 100644 --- a/src/msw/tooltip.cpp +++ b/src/msw/tooltip.cpp @@ -6,7 +6,7 @@ // Created: 31.01.99 // RCS-ID: $Id$ // Copyright: (c) 1999 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -32,7 +32,7 @@ #include "wx/tooltip.h" #include "wx/msw/private.h" -#if defined(__WIN95__) && !((defined(__GNUWIN32_OLD__) || defined(__TWIN32__)) && !defined(__CYGWIN10__)) +#if defined(__WIN95__) && !(defined(__GNUWIN32_OLD__) && !defined(__CYGWIN10__)) #include #endif @@ -77,7 +77,7 @@ static WNDPROC gs_wndprocToolTip = (WNDPROC)NULL; class wxToolInfo : public TOOLINFO { public: - wxToolInfo(HWND hwnd) + wxToolInfo(HWND hwndOwner) { // initialize all members ::ZeroMemory(this, sizeof(TOOLINFO)); @@ -95,8 +95,9 @@ public: cbSize = sizeof(TOOLINFO); #endif // compile-time comctl32.dll version + hwnd = hwndOwner; uFlags = TTF_IDISHWND; - uId = (UINT)hwnd; + uId = (UINT)hwndOwner; } }; @@ -274,12 +275,14 @@ void wxToolTip::Add(WXHWND hWnd) wxToolInfo ti(hwnd); - // as we store our text anyhow, it seems useless to waste system memory - // by asking the tooltip ctrl to remember it too - instead it will send - // us TTN_NEEDTEXT (via WM_NOTIFY) when it is about to be shown + // another possibility would be to specify LPSTR_TEXTCALLBACK here as we + // store the tooltip text ourselves anyhow, and provide it in response to + // TTN_NEEDTEXT (sent via WM_NOTIFY), but then we would be limited to 79 + // character tooltips as this is the size of the szText buffer in + // NMTTDISPINFO struct -- and setting the tooltip here we can have tooltips + // of any length ti.hwnd = hwnd; - ti.lpszText = LPSTR_TEXTCALLBACK; - // instead of: ti.lpszText = (char *)m_text.c_str(); + ti.lpszText = (wxChar *)m_text.c_str(); // const_cast if ( !SendTooltipMessage(GetToolTipCtrl(), TTM_ADDTOOL, 0, &ti) ) { @@ -309,7 +312,7 @@ void wxToolTip::Add(WXHWND hWnd) } } - HDC hdc = CreateCompatibleDC(NULL); + MemoryHDC hdc; if ( !hdc ) { wxLogLastError(wxT("CreateCompatibleDC(NULL)")); @@ -326,8 +329,6 @@ void wxToolTip::Add(WXHWND hWnd) wxLogLastError(wxT("GetTextExtentPoint")); } - DeleteDC(hdc); - SendTooltipMessage(GetToolTipCtrl(), TTM_SETMAXTIPWIDTH, 0, (void *)sz.cx); } @@ -351,7 +352,7 @@ void wxToolTip::SetWindow(wxWindow *win) { Add(m_window->GetHWND()); } - +#if !defined(__WXUNIVERSAL__) // and all of its subcontrols (e.g. radiobuttons in a radiobox) as well wxControl *control = wxDynamicCast(m_window, wxControl); if ( control ) @@ -382,14 +383,17 @@ void wxToolTip::SetWindow(wxWindow *win) // something like this where the derived class can do such things // itself instead of wxToolTip "knowing" about them all wxComboBox *combo = wxDynamicCast(control, wxComboBox); - if ( combo && !(combo->GetWindowStyle() & wxCB_READONLY)) + if ( combo ) { - WXHWND hwndComboEdit = combo->GetEditHWND(); + WXHWND hwndComboEdit = combo->GetWindowStyle() & wxCB_READONLY + ? combo->GetHWND() + : combo->GetEditHWND(); if ( hwndComboEdit ) { Add(hwndComboEdit); } } +#endif // !defined(__WXUNIVERSAL__) } void wxToolTip::SetTip(const wxString& tip) @@ -398,7 +402,7 @@ void wxToolTip::SetTip(const wxString& tip) if ( m_window ) { - // update it immediately + // update the tip text shown by the control wxToolInfo ti(GetHwndOf(m_window)); ti.lpszText = (wxChar *)m_text.c_str();