X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1be06faf7318abf88a35b299b90ceb2a49c0353b..5aab763c09c663ab5e5b92e533ca025e811f1bcf:/src/msw/tooltip.cpp?ds=sidebyside diff --git a/src/msw/tooltip.cpp b/src/msw/tooltip.cpp index 0dcc94f036..78b93e424c 100644 --- a/src/msw/tooltip.cpp +++ b/src/msw/tooltip.cpp @@ -32,7 +32,7 @@ #include "wx/tooltip.h" #include "wx/msw/private.h" -#if defined(__WIN95__) && (!defined(__GNUWIN32_OLD__) || defined(__MINGW32__)) +#if defined(__WIN95__) && !((defined(__GNUWIN32_OLD__) || defined(__TWIN32__)) && !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; } }; @@ -240,6 +241,8 @@ void wxToolTip::RelayEvent(WXMSG *msg) // ctor & dtor // ---------------------------------------------------------------------------- +IMPLEMENT_ABSTRACT_CLASS(wxToolTip, wxObject) + wxToolTip::wxToolTip(const wxString &tip) : m_text(tip) { @@ -272,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) ) { @@ -307,7 +312,7 @@ void wxToolTip::Add(WXHWND hWnd) } } - HDC hdc = CreateCompatibleDC(NULL); + MemoryHDC hdc; if ( !hdc ) { wxLogLastError(wxT("CreateCompatibleDC(NULL)")); @@ -324,8 +329,6 @@ void wxToolTip::Add(WXHWND hWnd) wxLogLastError(wxT("GetTextExtentPoint")); } - DeleteDC(hdc); - SendTooltipMessage(GetToolTipCtrl(), TTM_SETMAXTIPWIDTH, 0, (void *)sz.cx); } @@ -349,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 ) @@ -390,6 +393,7 @@ void wxToolTip::SetWindow(wxWindow *win) 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();