wxWidgets 有 wxStyledTextCtrl (据我所知)在幕后使用 Scintilla
我对 Scintilla API 了解不多,但我有点想你向它发出命令。
特别是,我想让光标具有块样式,我在 Notepad++ 中找到了以下代码段:
execute(SCI_SETCARETSTYLE, CARETSTYLE_BLOCK)
我想在 StyledTextCtrl 中做同样的事情,但我不知道如何进入幕后的 scinitilla 控件。
我该怎么做呢?
PS 我在 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);
}
所以我认为这就是向底层闪烁组件发送命令的方式。
所以,我得到了我需要的值
#define CARETSTYLE_INVISIBLE 0 #define CARETSTYLE_LINE 1 #define CARETSTYLE_BLOCK 2 #define SCI_SETCARETSTYLE 2512 #define SCI_GETCARETSTYLE 2513
2512也是如此SCI_SETCARETSTYLE
,块样式为2。
所以我SengMsg
用这些参数调用:
self.SendMsg(2512, 2)
但是好像没什么效果!
可能是什么原因?我该如何调试呢?