WXWIDGETS : StyledTextCtrl에서 간병 스타일을 변경하는 방법 (Scintilla로 명령을 보내기)
문제
wxwidgets에는 wxstyledtextctrl이 있습니다.
나는 Scintilla API에 대해 많이 모르지만, 나는 당신이 그것에 명령을 내리는 아이디어를 가지고 있습니다.
특히 커서를 블록 스타일로 만들고 싶습니다. 메모장 ++에서 다음 스 니펫을 찾았습니다.
execute(SCI_SETCARETSTYLE, CARETSTYLE_BLOCK)
나는 스타일의 textctrl에서 똑같이하고 싶지만, 현장 뒤에서 Scinitilla 컨트롤에 도달하는 방법을 모른다.
어떻게해야합니까?
추신 : 저는 Wxpython에서 일하고 있지만 차이가 없다고 생각합니다.
업데이트:
WXWIDGET의 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 / WXWidget 버전을 작성하지는 않지만 2.8.x 버전이라고 가정합니다. 여기에는 Scintilla 버전 1.70이 포함되어 있으며 SVN 트렁크 (곧 WXWIDGETS 버전 2.9로 출시 될 예정)에는 Scintilla 버전 1.75가 있습니다. ㅏ grep Scintilla 헤더 파일을 통해이를 보여줍니다 Sci_getCaretStyle 그리고 Sci_SetCaretStyle wxwidgets 트렁크에만 있으므로 해당 메시지는 WXWidgets 2.8에서 전혀 처리되지 않습니다.
다른 팁
노력하다
self.SendMsg(msg=2512, lp=2)