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)
但似乎没有任何影响!
可能是什么原因?我该怎么调试呢?
答案 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)