2014-11-21 10 views
2

Scintilla 마커가 여백에 얼마나 바운드되는지 이해하는 데 문제가 있습니다. 3 마진을 원합니다. 첫 번째 줄 번호 (여기에는 문제 없음), 두 번째 화살표 마커에만, 세 번째는 서클 제조업체에만 해당됩니다. 문서에서 마진을 마진에 바인딩하는 marginmasks를 지정해야한다는 것을 알고 있지만 마스크를 지정하는 방법은 알지 못합니다. 나는 조금 주위를 시험했지만 결코 원하는 결과를 얻지 못했다. 두 화살표가 양쪽 마진 (둘째 및 세 번째)에 표시되었거나 기호가 강조 표시되지 않고 대신 선이 높게 표시되었습니다. 누군가가 나를 여백 마스크를 설정하는 방법을 깨우칠 수 있기를 바랍니다.Scintilla에서 마진 마스크를 설정하는 방법은 무엇입니까?

/* 2nd marker margin -> only arrows */ 
Call(SCI_SETMARGINTYPEN, 1, SC_MARGIN_SYMBOL); 
Call(SCI_SETMARGINWIDTHN, 1, 20); 
Call(SCI_SETMARGINSENSITIVEN, 1, 1); 
Call(SCI_SETMARGINMASKN, 1, SC_MARK_ARROW); // <=== ??? 
DefineMarker(1, SC_MARK_ARROW, 0xffffff, 0x0000ff); 

/* 3rd marker margin -> only circles */ 
Call(SCI_SETMARGINTYPEN, 2, SC_MARGIN_SYMBOL); 
Call(SCI_SETMARGINWIDTHN, 2, 50); 
Call(SCI_SETMARGINSENSITIVEN, 2, 1); 

DefineMarker(2, SC_MARK_CIRCLE, 0xffffff, 0x00ff00); 
Call(SCI_SETMARGINMASKN, 2, SC_MARK_CIRCLE); // <=== ??? 

Call(SCI_MARKERADD, 1, 1); 
Call(SCI_MARKERADD, 1, 2); 

내가 마진 1의 화살표 마커 만 강조 표시된 라인과 사람이 마스크를 설정해야하는 방법을 설명 할 수 있다면 내가 기쁠 마진 2에 대한 원 마커를 얻을 그런 식으로.

답변

3

사용할 수있는 마커는 32 개이며 0에서 24까지의 숫자는 미리 정의 된 용도가 없습니다. 25에서 31까지의 숫자는 접기에 사용되지만, 필요하지 않으면 그 숫자도 사용할 수 있습니다.

첫 번째 단계는 설정하려는 각 마커에 대해 숫자를 선택하는 것입니다. 화살표는 4, 원은 5 (이 경우 일부 상수를 정의해야합니다).

여백 마스크는 32 비트 값입니다. 그래서

DefineMarker(4, SC_MARK_ARROW, 0xffffff, 0x0000ff); 
    DefineMarker(5, SC_MARK_CIRCLE, 0xffffff, 0x00ff00); 

:

Call(SCI_SETMARGINMASKN, 1, 1 << 4); // 2nd margin, arrow marker 
    Call(SCI_SETMARGINMASKN, 2, 1 << 5); // 3rd margin, circle marker 

는 그런 다음 마커 자체를 정의해야을 설정하려면 해당 마진을 활성화해야 마커 각 숫자에 해당하는 비트를 뒤집어 야 마지막으로 특정 줄에 추가 할 수 있습니다.

Call(SCI_MARKERADD, 1, 4); 
    Call(SCI_MARKERADD, 1, 5);