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

📄 textctrl.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    MacSuperChangedPosition() ;    if ( m_windowStyle & wxTE_READONLY)        SetEditable( false ) ;    SetCursor( wxCursor( wxCURSOR_IBEAM ) ) ;    return true;}void wxTextCtrl::CreatePeer(           const wxString& str,           const wxPoint& pos,           const wxSize& size, long style ){    bool forceMLTE = false ;#if wxUSE_SYSTEM_OPTIONS    if (wxSystemOptions::HasOption( wxMAC_TEXTCONTROL_USE_MLTE ) && (wxSystemOptions::GetOptionInt( wxMAC_TEXTCONTROL_USE_MLTE ) == 1))    {        forceMLTE = true ;    }#endif#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5    forceMLTE = false;#endif#ifdef __WXMAC_OSX__#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2    if ( UMAGetSystemVersion() >= 0x1030 && !forceMLTE )    {        if ( m_windowStyle & wxTE_MULTILINE )            m_peer = new wxMacMLTEHIViewControl( this , str , pos , size , style ) ;    }#endif    if ( !m_peer )    {#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5        if ( !(m_windowStyle & wxTE_MULTILINE) && !forceMLTE )#endif        {            m_peer = new wxMacUnicodeTextControl( this , str , pos , size , style ) ;        }    }#endif    // the horizontal single line scrolling bug that made us keep #if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5    if ( !m_peer )        m_peer = new wxMacMLTEClassicControl( this , str , pos , size , style ) ;#endif}void wxTextCtrl::MacSuperChangedPosition(){    wxWindow::MacSuperChangedPosition() ;    GetPeer()->SuperChangedPosition() ;}void wxTextCtrl::MacVisibilityChanged(){    GetPeer()->VisibilityChanged( MacIsReallyShown() ) ;}void wxTextCtrl::MacEnabledStateChanged(){}void wxTextCtrl::MacCheckSpelling(bool check){    GetPeer()->CheckSpelling(check);}wxString wxTextCtrl::GetValue() const{    return GetPeer()->GetStringValue() ;}void wxTextCtrl::GetSelection(long* from, long* to) const{    GetPeer()->GetSelection( from , to ) ;}void wxTextCtrl::DoSetValue(const wxString& str, int flags){    // optimize redraws    if ( GetValue() == str )        return;    GetPeer()->SetStringValue( str ) ;    if ( (flags & SetValue_SendEvent) && m_triggerOnSetValue )    {        SendTextUpdatedEvent();    }}void wxTextCtrl::SetMaxLength(unsigned long len){    m_maxLength = len ;}bool wxTextCtrl::SetFont( const wxFont& font ){    if ( !wxTextCtrlBase::SetFont( font ) )        return false ;    GetPeer()->SetFont( font , GetForegroundColour() , GetWindowStyle() ) ;    return true ;}bool wxTextCtrl::SetStyle(long start, long end, const wxTextAttr& style){    GetPeer()->SetStyle( start , end , style ) ;    return true ;}bool wxTextCtrl::SetDefaultStyle(const wxTextAttr& style){    wxTextCtrlBase::SetDefaultStyle( style ) ;    SetStyle( kTXNUseCurrentSelection , kTXNUseCurrentSelection , GetDefaultStyle() ) ;    return true ;}// Clipboard operationsvoid wxTextCtrl::Copy(){    if (CanCopy())        GetPeer()->Copy() ;}void wxTextCtrl::Cut(){    if (CanCut())    {        GetPeer()->Cut() ;        wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, m_windowId );        event.SetEventObject( this );        GetEventHandler()->ProcessEvent( event );      }}void wxTextCtrl::Paste(){    if (CanPaste())    {        GetPeer()->Paste() ;        // TODO: eventually we should add setting the default style again        wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, m_windowId );        event.SetEventObject( this );        GetEventHandler()->ProcessEvent( event );    }}bool wxTextCtrl::CanCopy() const{    // Can copy if there's a selection    long from, to;    GetSelection( &from, &to );    return (from != to);}bool wxTextCtrl::CanCut() const{    if ( !IsEditable() )        return false;    // Can cut if there's a selection    long from, to;    GetSelection( &from, &to );    return (from != to);}bool wxTextCtrl::CanPaste() const{    if (!IsEditable())        return false;    return GetPeer()->CanPaste() ;}void wxTextCtrl::SetEditable(bool editable){    if ( editable != m_editable )    {        m_editable = editable ;        GetPeer()->SetEditable( editable ) ;    }}void wxTextCtrl::SetInsertionPoint(long pos){    SetSelection( pos , pos ) ;}void wxTextCtrl::SetInsertionPointEnd(){    wxTextPos pos = GetLastPosition();    SetInsertionPoint( pos );}long wxTextCtrl::GetInsertionPoint() const{    long begin, end ;    GetSelection( &begin , &end ) ;    return begin ;}wxTextPos wxTextCtrl::GetLastPosition() const{    return GetPeer()->GetLastPosition() ;}void wxTextCtrl::Replace(long from, long to, const wxString& str){    GetPeer()->Replace( from , to , str ) ;}void wxTextCtrl::Remove(long from, long to){    GetPeer()->Remove( from , to ) ;}void wxTextCtrl::SetSelection(long from, long to){    GetPeer()->SetSelection( from , to ) ;}void wxTextCtrl::WriteText(const wxString& str){    // TODO: this MPRemoting will be moved into a remoting peer proxy for any command    if ( !wxIsMainThread() )    {        // unfortunately CW 8 is not able to correctly deduce the template types,        // so we have to instantiate explicitly        wxMacMPRemoteGUICall<wxTextCtrl,wxString>( this , &wxTextCtrl::WriteText , str ) ;        return ;    }    GetPeer()->WriteText( str ) ;}void wxTextCtrl::AppendText(const wxString& text){    SetInsertionPointEnd();    WriteText( text );}void wxTextCtrl::Clear(){    GetPeer()->Clear() ;}bool wxTextCtrl::IsModified() const{    return m_dirty;}bool wxTextCtrl::IsEditable() const{    return IsEnabled() && m_editable ;}bool wxTextCtrl::AcceptsFocus() const{    // we don't want focus if we can't be edited    return /*IsEditable() && */ wxControl::AcceptsFocus();}wxSize wxTextCtrl::DoGetBestSize() const{    int wText, hText;    // these are the numbers from the HIG:    // we reduce them by the borders first    wText = 100 ;    switch ( m_windowVariant )    {        case wxWINDOW_VARIANT_NORMAL :            hText = 22 - 6 ;            break ;        case wxWINDOW_VARIANT_SMALL :            hText = 19 - 6 ;            break ;        case wxWINDOW_VARIANT_MINI :            hText = 15 - 6 ;            break ;        default :            hText = 22 - 6;            break ;    }    // as the above numbers have some free space around the text    // we get 5 lines like this anyway    if ( m_windowStyle & wxTE_MULTILINE )         hText *= 5 ;    if ( !HasFlag(wxNO_BORDER) )        hText += 6 ;    return wxSize(wText, hText);}// ----------------------------------------------------------------------------// Undo/redo// ----------------------------------------------------------------------------void wxTextCtrl::Undo(){    if (CanUndo())        GetPeer()->Undo() ;}void wxTextCtrl::Redo(){    if (CanRedo())        GetPeer()->Redo() ;}bool wxTextCtrl::CanUndo() const{    if ( !IsEditable() )        return false ;    return GetPeer()->CanUndo() ;}bool wxTextCtrl::CanRedo() const{    if ( !IsEditable() )        return false ;    return GetPeer()->CanRedo() ;}void wxTextCtrl::MarkDirty(){    m_dirty = true;}void wxTextCtrl::DiscardEdits(){    m_dirty = false;}int wxTextCtrl::GetNumberOfLines() const{    return GetPeer()->GetNumberOfLines() ;}long wxTextCtrl::XYToPosition(long x, long y) const{    return GetPeer()->XYToPosition( x , y ) ;}bool wxTextCtrl::PositionToXY(long pos, long *x, long *y) const{    return GetPeer()->PositionToXY( pos , x , y ) ;}void wxTextCtrl::ShowPosition(long pos){    return GetPeer()->ShowPosition(pos) ;}int wxTextCtrl::GetLineLength(long lineNo) const{    return GetPeer()->GetLineLength(lineNo) ;}wxString wxTextCtrl::GetLineText(long lineNo) const{    return GetPeer()->GetLineText(lineNo) ;}void wxTextCtrl::Command(wxCommandEvent & event){    SetValue(event.GetString());    ProcessCommand(event);}void wxTextCtrl::OnDropFiles(wxDropFilesEvent& event){    // By default, load the first file into the text window.    if (event.GetNumberOfFiles() > 0)        LoadFile( event.GetFiles()[0] );}void wxTextCtrl::OnEraseBackground(wxEraseEvent& event){    // all erasing should be done by the real mac control implementation    // while this is true for MLTE under classic, the HITextView is somehow    // transparent but background erase is not working correctly, so intercept    // things while we can...    event.Skip() ;}void wxTextCtrl::OnChar(wxKeyEvent& event){    int key = event.GetKeyCode() ;    bool eat_key = false ;    if ( key == 'a' && event.MetaDown() )    {        SelectAll() ;        return ;    }    if ( key == 'c' && event.MetaDown() )    {        if ( CanCopy() )            Copy() ;        return ;    }    if ( !IsEditable() && key != WXK_LEFT && key != WXK_RIGHT && key != WXK_DOWN && key != WXK_UP && key != WXK_TAB &&        !( key == WXK_RETURN && ( (m_windowStyle & wxTE_PROCESS_ENTER) || (m_windowStyle & wxTE_MULTILINE) ) )//        && key != WXK_PAGEUP && key != WXK_PAGEDOWN && key != WXK_HOME && key != WXK_END        )    {        // eat it        return ;    }    // Check if we have reached the max # of chars (if it is set), but still    // allow navigation and deletion    if ( !IsMultiLine() && m_maxLength && GetValue().length() >= m_maxLength &&        key != WXK_LEFT && key != WXK_RIGHT && key != WXK_TAB &&        key != WXK_BACK && !( key == WXK_RETURN && (m_windowStyle & wxTE_PROCESS_ENTER) )       )    {        // eat it, we don't want to add more than allowed # of characters        // TODO: generate EVT_TEXT_MAXLEN()        return;    }    // assume that any key not processed yet is going to modify the control    m_dirty = true;    if ( key == 'v' && event.MetaDown() )    {        if ( CanPaste() )            Paste() ;        return ;    }    if ( key == 'x' && event.MetaDown() )    {        if ( CanCut() )            Cut() ;        return ;    }    switch ( key )    {        case WXK_RETURN:            if (m_windowStyle & wxTE_PROCESS_ENTER)            {                wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId);                event.SetEventObject( this );                event.SetString( GetValue() );                if ( GetEventHandler()->ProcessEvent(event) )                    return;            }

⌨️ 快捷键说明

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