wxWidgets:如何在StyledTextCtrl中更改插入符号样式(向scintilla发送命令)

时间:2009-04-28 23:54:57

标签: wxpython wxwidgets caret scintilla

wxWidgets有wxStyledTextCtrl(据我所知)在幕后使用Scintilla

我对Scintilla API了解不多,但我有点想要向它发出命令。

特别是,我想让光标有一个块样式,我在Notepad ++中找到了以下片段:

execute(SCI_SETCARETSTYLE, CARETSTYLE_BLOCK)

我想在StyledTextCtrl中做同样的事情,但我不知道如何到达幕后的scinitilla控件。

我该怎么做?

P.S。我在wxPython工作,但我认为它没有什么区别。

更新

在深入挖掘wxWidgets的c ++源代码后,我发现大多数函数只调用SendMsg,例如:

// Get the time in milliseconds that the caret is on and off. 0 = steady on.
void wxStyledTextCtrl::SetCaretPeriod(int periodMilliseconds)
{
    SendMsg(2076, periodMilliseconds, 0);
}

所以我认为这是将命令发送到底层scintilla组件的方式。

所以,我得到了我需要的值

#define CARETSTYLE_INVISIBLE 0
#define CARETSTYLE_LINE 1
#define CARETSTYLE_BLOCK 2
#define SCI_SETCARETSTYLE 2512
#define SCI_GETCARETSTYLE 2513

所以SCI_SETCARETSTYLE是2512,块样式是2.

所以我使用以下参数调用SengMsg

self.SendMsg(2512, 2)

但似乎没有任何影响!

可能是什么原因?我该怎么调试呢?

2 个答案:

答案 0 :(得分:2)

您没有编写正在使用的wxPython / wxWidgets版本,但我认为它是2.8.x版本。这包含Scintilla版本1.70,而SVN主干(即将发布为wxWidgets版本2.9)具有Scintilla版本1.75。 Scintilla头文件上的 grep 显示 SCI_GETCARETSTYLE SCI_SETCARETSTYLE 仅在wxWidgets主干中,因此这些消息根本不会被处理wxWidgets 2.8。

答案 1 :(得分:0)

尝试

self.SendMsg(msg=2512, lp=2)