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

📄 textctrl.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    else    {        hText = 13 ;    }/*    int cx, cy;    wxGetCharSize(GetHWND(), &cx, &cy, &GetFont());    int wText = DEFAULT_ITEM_WIDTH;    int hText = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy);    return wxSize(wText, hText);*/    if ( m_windowStyle & wxTE_MULTILINE )    {         hText *= 5 ;    }    hText += 2 * m_macVerticalBorder ;    wText += 2 * m_macHorizontalBorder ;    //else: for single line control everything is ok    return wxSize(wText, hText);}// ----------------------------------------------------------------------------// Undo/redo// ----------------------------------------------------------------------------void wxTextCtrl::Undo(){    if (CanUndo())    {        if ( m_macUsesTXN )        {            TXNUndo((TXNObject)m_macTXN);        }    }}void wxTextCtrl::Redo(){    if (CanRedo())    {        if ( m_macUsesTXN )        {            TXNRedo((TXNObject)m_macTXN);        }    }}bool wxTextCtrl::CanUndo() const{    if ( !IsEditable() )    {        return false ;    }    if ( m_macUsesTXN )    {        return TXNCanUndo((TXNObject)m_macTXN,NULL);    }    return false ;}bool wxTextCtrl::CanRedo() const{    if ( !IsEditable() )    {        return false ;    }    if ( m_macUsesTXN )    {        return TXNCanRedo((TXNObject)m_macTXN,NULL);    }    return false ;}// Makes modifie or unmodifiedvoid wxTextCtrl::MarkDirty(){    m_dirty = true;}void wxTextCtrl::DiscardEdits(){    m_dirty = false;}int wxTextCtrl::GetNumberOfLines() const{    if ( m_macUsesTXN )    {        ItemCount lines ;        TXNGetLineCount((TXNObject)m_macTXN, &lines ) ;        return lines ;    }    else    {        wxString content = GetValue() ;        int count = 1;        for (size_t i = 0; i < content.length() ; i++)        {            if (content[i] == '\r') count++;        }        return count;    }}long wxTextCtrl::XYToPosition(long x, long y) const{    // TODO    return 0;}bool wxTextCtrl::PositionToXY(long pos, long *x, long *y) const{    return false ;}void wxTextCtrl::ShowPosition(long pos){#if TARGET_RT_MAC_MACHO && defined(AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER)    if ( m_macUsesTXN )    {        Point current ;        Point desired ;        TXNOffset selstart , selend ;        TXNGetSelection(  (TXNObject) m_macTXN , &selstart , &selend) ;        TXNOffsetToPoint( (TXNObject) m_macTXN,  selstart , &current);        TXNOffsetToPoint( (TXNObject) m_macTXN,  pos , &desired);        //TODO use HIPoints for 10.3 and above        if ( (UInt32) TXNScroll != (UInt32) kUnresolvedCFragSymbolAddress )        {            OSErr theErr = noErr;            SInt32 dv = desired.v - current.v ;            SInt32 dh = desired.h - current.h ;            TXNShowSelection(  (TXNObject) m_macTXN , true ) ;            theErr = TXNScroll( (TXNObject) m_macTXN, kTXNScrollUnitsInPixels , kTXNScrollUnitsInPixels , &dv , &dh );            wxASSERT_MSG( theErr == noErr, _T("TXNScroll returned an error!") );        }    }#endif}int wxTextCtrl::GetLineLength(long lineNo) const{    // TODO change this if possible to reflect real lines    wxString content = GetValue() ;    // Find line first    int count = 0;    for (size_t i = 0; i < content.length() ; i++)    {        if (count == lineNo)        {            // Count chars in line then            count = 0;            for (size_t j = i; j < content.length(); j++)            {                count++;                if (content[j] == '\n') return count;            }            return count;        }        if (content[i] == '\n') count++;    }    return 0;}wxString wxTextCtrl::GetLineText(long lineNo) const{    // TODO change this if possible to reflect real lines    wxString content = GetValue() ;    // Find line first    int count = 0;    for (size_t i = 0; i < content.length() ; i++)    {        if (count == lineNo)        {            // Add chars in line then            wxString tmp;            for (size_t j = i; j < content.length(); j++)            {                if (content[j] == '\n')                    return tmp;                tmp += content[j];            }            return tmp;        }        if (content[i] == '\n') count++;    }    return wxEmptyString ;}/* * Text item */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::OnChar(wxKeyEvent& event){    int key = event.GetKeyCode() ;    bool eat_key = false ;    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 ;    }    // 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;            }            if ( !(m_windowStyle & wxTE_MULTILINE) )            {                wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);                if ( tlw && tlw->GetDefaultItem() )                {                    wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton);                    if ( def && def->IsEnabled() )                    {                        wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );                        event.SetEventObject(def);                        def->Command(event);                        return ;                   }                }                // this will make wxWidgets eat the ENTER key so that                // we actually prevent line wrapping in a single line                // text control                eat_key = true;            }            break;        case WXK_TAB:            if ( !(m_windowStyle & wxTE_PROCESS_TAB))            {                int flags = 0;                if (!event.ShiftDown())                    flags |= wxNavigationKeyEvent::IsForward ;                if (event.ControlDown())                    flags |= wxNavigationKeyEvent::WinChange ;                Navigate(flags);                return;            }            else            {                // This is necessary (don't know why) or the tab will not                // be inserted.                WriteText(wxT("\t"));            }            break;    }    if (!eat_key)    {        // perform keystroke handling#if TARGET_CARBON        if ( m_macUsesTXN && wxTheApp->MacGetCurrentEvent() != NULL && wxTheApp->MacGetCurrentEventHandlerCallRef() != NULL )            CallNextEventHandler((EventHandlerCallRef)wxTheApp->MacGetCurrentEventHandlerCallRef() , (EventRef) wxTheApp->MacGetCurrentEvent() ) ;        else        {            EventRecord rec ;            if ( wxMacConvertEventToRecord(  (EventRef) wxTheApp->MacGetCurrentEvent() , &rec ) )            {                EventRecord *ev = &rec ;                short keycode ;                short keychar ;                keychar = short(ev->message & charCodeMask);                keycode = short(ev->message & keyCodeMask) >> 8 ;                ::HandleControlKey( (ControlHandle) m_macControl , keycode , keychar , ev->modifiers ) ;            }        }#else        EventRecord *ev = (EventRecord*) wxTheApp->MacGetCurrentEvent() ;        short keycode ;        short keychar ;        keychar = short(ev->message & charCodeMask);        keycode = short(ev->message & keyCodeMask) >> 8 ;        ::HandleControlKey( (ControlHandle) m_macControl , keycode , keychar , ev->modifiers ) ;#endif    }    if ( ( key >= 0x20 && key < WXK_START ) ||         key == WXK_RETURN ||         key == WXK_DELETE ||         key == WXK_BACK)    {        wxCommandEvent event1(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);        event1.SetEventObject( this );        wxPostEvent(GetEventHandler(),event1);    }}void  wxTextCtrl::MacSuperShown( bool show ){    bool former = m_macControlIsShown ;    wxControl::MacSuperShown( show ) ;    if ( (former != m_macControlIsShown) && m_macUsesTXN )    {        if ( m_macControlIsShown )            TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left,                (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom,(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame);        else            TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left,               (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame);    }}bool  wxTextCtrl::Show(bool show){    bool former = m_macControlIsShown ;    bool retval = wxControl::Show( show ) ;    if ( former != m_macControlIsShown && m_macUsesTXN )    {        if ( m_macControlIsShown )            TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left,                (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom,(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame);        else            TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left,               (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame);    }    return retval ;}// ----------------------------------------------------------------------------// standard handlers for standard edit menu events// ----------------------------------------------------------------------------void wxTextCtrl::OnCut(wxCommandEvent& WXUNUSED(event)){    Cut();}void wxTextCtrl::OnCopy(wxCommandEvent& WXUNUSED(event)){    Copy();}void wxTextCtrl::OnPaste(wxCommandEvent& WXUNUSED(event)){    Paste();}void wxTextCtrl::OnUndo(wxCommandEvent& WXUNUSED(event)){    Undo();}void wxTextCtrl::OnRedo(wxCommandEvent& WXUNUSED(event)){    Redo();}void wxTextCtrl::OnUpdateCut(wxUpdateUIEvent& event){    event.Enable( CanCut() );}void wxTextCtrl::OnUpdateCopy(wxUpdateUIEvent& event){    event.Enable( CanCopy() );}void wxTextCtrl::OnUpdatePaste(wxUpdateUIEvent& event){    event.Enable( CanPaste() );}void wxTextCtrl::OnUpdateUndo(wxUpdateUIEvent& event){    event.Enable( CanUndo() );}void wxTextCtrl::OnUpdateRedo(wxUpdateUIEvent& event){    event.Enable( CanRedo() );}bool wxTextCtrl::MacSetupCursor( const wxPoint& pt ){    if ( m_macUsesTXN )        return true ;    else        return wxWindow::MacSetupCursor( pt ) ;}#endif    // wxUSE_TEXTCTRL

⌨️ 快捷键说明

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