⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tooltip.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        src/mac/carbon/tooltip.cpp// Purpose:     wxToolTip implementation// Author:      Stefan Csomor// Id:          $Id: tooltip.cpp,v 1.47 2006/10/21 16:39:42 VZ Exp $// Copyright:   (c) Stefan Csomor// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////#include "wx/wxprec.h"#if wxUSE_TOOLTIPS#include "wx/tooltip.h"#ifndef WX_PRECOMP    #include "wx/app.h"    #include "wx/window.h"    #include "wx/dc.h"    #include "wx/timer.h"#endif // WX_PRECOMP#include "wx/geometry.h"#include "wx/mac/uma.h"//-----------------------------------------------------------------------------// global data//-----------------------------------------------------------------------------class wxMacToolTipTimer ;class wxMacToolTip{public :    wxMacToolTip() ;    ~wxMacToolTip() ;    void Setup( WindowRef window , const wxString& text , const wxPoint& localPosition ) ;    void Draw() ;    void Clear() ;    long GetMark()    { return m_mark ; }    bool IsShown()    { return m_shown ; }private :    wxString    m_label ;    wxPoint m_position ;    Rect            m_rect ;    WindowRef    m_window ;    PicHandle    m_backpict ;    bool        m_shown ;    long        m_mark ;#if wxUSE_TIMER     wxMacToolTipTimer* m_timer ;#endif#if TARGET_CARBON    wxMacCFStringHolder m_helpTextRef ;#endif} ;#if wxUSE_TIMERclass wxMacToolTipTimer : public wxTimer{public:    wxMacToolTipTimer(wxMacToolTip* tip, int iMilliseconds) ;    wxMacToolTipTimer() {} ;    virtual ~wxMacToolTipTimer() {} ;    void Notify()    {        if ( m_mark == m_tip->GetMark() )            m_tip->Draw() ;    }protected:    wxMacToolTip*     m_tip;    long        m_mark ;};#endif // wxUSE_TIMER//-----------------------------------------------------------------------------// wxToolTip//-----------------------------------------------------------------------------static long s_ToolTipDelay = 500 ;static bool s_ShowToolTips = true ;static wxMacToolTip s_ToolTip ;static wxWindow* s_LastWindowEntered = NULL ;static wxRect2DInt s_ToolTipArea ;static WindowRef s_ToolTipWindowRef = NULL ;IMPLEMENT_ABSTRACT_CLASS(wxToolTip, wxObject)wxToolTip::wxToolTip( const wxString &tip ){    m_text = tip;    m_window = (wxWindow*) NULL;}wxToolTip::~wxToolTip(){}void wxToolTip::SetTip( const wxString &tip ){    m_text = tip;    if ( m_window )    {#if 0    // update it immediately    wxToolInfo ti(GetHwndOf(m_window));    ti.lpszText = (wxChar *)m_text.c_str();    (void)SendTooltipMessage(GetToolTipCtrl(), TTM_UPDATETIPTEXT, 0, &ti);#endif    }}void wxToolTip::SetWindow( wxWindow *win ){    m_window = win ;}void wxToolTip::Enable( bool flag ){    if ( s_ShowToolTips != flag )    {        s_ShowToolTips = flag ;        if ( s_ShowToolTips )        {        }        else        {            s_ToolTip.Clear() ;        }    }}void wxToolTip::SetDelay( long msecs ){    s_ToolTipDelay = msecs ;}void wxToolTip::RelayEvent( wxWindow *win , wxMouseEvent &event ){    if ( s_ShowToolTips )    {        if ( event.GetEventType() == wxEVT_LEAVE_WINDOW )        {            s_ToolTip.Clear() ;        }        else if (event.GetEventType() == wxEVT_ENTER_WINDOW || event.GetEventType() == wxEVT_MOTION )        {            wxPoint2DInt where( event.m_x , event.m_y ) ;            if ( s_LastWindowEntered == win && s_ToolTipArea.Contains( where ) )            {            }            else            {                s_ToolTip.Clear() ;                s_ToolTipArea = wxRect2DInt( event.m_x - 2 , event.m_y - 2 , 4 , 4 ) ;                s_LastWindowEntered = win ;                WindowRef window = MAC_WXHWND( win->MacGetTopLevelWindowRef() ) ;                int x = event.m_x ;                int y = event.m_y ;                wxPoint local( x , y ) ;                win->MacClientToRootWindow( &x, &y ) ;                wxPoint windowlocal( x , y ) ;                s_ToolTip.Setup( window , win->MacGetToolTipString( local ) , windowlocal ) ;            }        }    }}void wxToolTip::RemoveToolTips(){    s_ToolTip.Clear() ;}// --- mac specific#if wxUSE_TIMER wxMacToolTipTimer::wxMacToolTipTimer( wxMacToolTip *tip , int msec ){    m_tip = tip;    m_mark = tip->GetMark() ;    Start(msec, true);}#endif // wxUSE_TIMERwxMacToolTip::wxMacToolTip(){    m_window = NULL ;    m_backpict = NULL ;#if wxUSE_TIMER     m_timer = NULL ;#endif    m_mark = 0 ;    m_shown = false ;}void wxMacToolTip::Setup( WindowRef win  , const wxString& text , const wxPoint& localPosition ){    m_mark++ ;    Clear() ;    m_position = localPosition ;    m_label = text ;    m_window =win;    s_ToolTipWindowRef = m_window ;    m_backpict = NULL ;#if wxUSE_TIMER     if ( m_timer )        delete m_timer ;    m_timer = new wxMacToolTipTimer( this , s_ToolTipDelay ) ;#endif // wxUSE_TIMER}wxMacToolTip::~wxMacToolTip(){#if wxUSE_TIMER     if ( m_timer )    {        delete m_timer ;        m_timer = NULL;    }#endif // wxUSE_TIMER    if ( m_backpict )        Clear() ;}const short kTipBorder = 2 ;const short kTipOffset = 5 ;void wxMacToolTip::Draw(){    if ( m_label.empty() )        return ;    if ( m_window == s_ToolTipWindowRef )    {        m_shown = true ;        HMHelpContentRec tag ;        tag.version = kMacHelpVersion;        Point p = { m_position.y , m_position.x };        wxMacLocalToGlobal( m_window , &p ) ;        SetRect( &tag.absHotRect , p.h - 2 , p.v - 2 , p.h + 2 , p.v + 2 );        m_helpTextRef.Assign( m_label , wxFONTENCODING_DEFAULT ) ;        tag.content[kHMMinimumContentIndex].contentType = kHMCFStringContent ;        tag.content[kHMMinimumContentIndex].u.tagCFString = m_helpTextRef ;        tag.content[kHMMaximumContentIndex].contentType = kHMCFStringContent ;        tag.content[kHMMaximumContentIndex].u.tagCFString = m_helpTextRef ;        tag.tagSide = kHMDefaultSide;        HMDisplayTag( &tag );    }}void wxToolTip::NotifyWindowDelete( WXHWND win ){    if ( win == s_ToolTipWindowRef )        s_ToolTipWindowRef = NULL ;}void wxMacToolTip::Clear(){    m_mark++ ;#if wxUSE_TIMER     if ( m_timer )    {        delete m_timer ;        m_timer = NULL ;    }#endif // wxUSE_TIMER    if ( !m_shown )        return ;    HMHideTag() ;    m_helpTextRef.Release() ;}#endif // wxUSE_TOOLTIPS

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -