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)

但似乎没有任何影响!

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

有帮助吗?

解决方案

您没有编写正在使用的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。

其他提示

尝试

self.SendMsg(msg=2512, lp=2)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top