wxStyledTextCtrl代码完成

时间:2015-11-02 01:47:11

标签: wxwidgets scintilla

我正在为Lua设计一个简单的编辑器,用于使用wxWidgets用C ++编写的软件。我一直在寻找在C ++中使用wxStyledTextCtrl实现代码完成的简单示例。

我检查过Scintilla和wxWidgets的网站,但找不到任何网站。我想知道是否有人可以提供代码片段。

1 个答案:

答案 0 :(得分:0)

不幸的是,我发现最初的Scintilla文档还有很多不足之处,wxStyledTextCtrl文档几乎是Scintilla文档的逐字副本。

我最近在 ScintillaNET 项目中发现了这篇wiki文章,它对开始使用自动完成非常有帮助。对于任何Scintilla实现,该过程都是相同的。我实际上将它用于 IupScintilla

https://github.com/jacobslusser/ScintillaNET/wiki/Basic-Autocompletion

private void scintilla_CharAdded(object sender, CharAddedEventArgs e)
{
    // Find the word start
    var currentPos = scintilla.CurrentPosition;
    var wordStartPos = scintilla.WordStartPosition(currentPos, true);

    // Display the autocompletion list
    var lenEntered = currentPos - wordStartPos;
    if (lenEntered > 0)
    {
        scintilla.AutoCShow(lenEntered, "abstract as base break case catch checked continue default delegate do else event explicit extern false finally fixed for foreach goto if implicit in interface internal is lock namespace new null object operator out override params private protected public readonly ref return sealed sizeof stackalloc switch this throw true try typeof unchecked unsafe using virtual while");
    }
}

这是一个简单的wxWidgets应用程序,可以执行相同的操作:

#include <wx/wx.h>
#include <wx/stc/stc.h>

class wxTestProject : public wxApp
{
public:
    bool OnInit();
    void OnChange( wxStyledTextEvent& event );
};

wxIMPLEMENT_APP(wxTestProject);

bool wxTestProject::OnInit()
{
    wxFrame* frame = new wxFrame( NULL, wxID_ANY, "wxTestProject",
        wxDefaultPosition, wxSize(640,480) );

    wxStyledTextCtrl* stc = new wxStyledTextCtrl( frame, wxID_ANY,
        wxDefaultPosition, wxDefaultSize, wxBORDER_NONE );
    stc->SetLexerLanguage( "lua" );
    stc->Bind( wxEVT_STC_CHANGE, &wxTestProject::OnChange, this );

    this->SetTopWindow( frame );
    frame->Show();

    return true;
}

void wxTestProject::OnChange( wxStyledTextEvent& event )
{
    wxStyledTextCtrl* stc = (wxStyledTextCtrl*)event.GetEventObject();

    // Find the word start
    int currentPos = stc->GetCurrentPos();
    int wordStartPos = stc->WordStartPosition( currentPos, true );

    // Display the autocompletion list
    int lenEntered = currentPos - wordStartPos;
    if (lenEntered > 0)
    {
        stc->AutoCompShow(lenEntered, "and break do else elseif end false for function if in local nil not or repeat return then true until while");
    }
}