2014-11-21 68 views
2

我有一个理解Scintilla标记如何绑定到边界的问题。 可以说我想要3个边距。第一名为亚麻(这里没有问题),第二名仅用于箭头标记,第三名仅用于圈子制作者。我从文档中知道我必须指定边界遮罩来将标记绑定到边距,但我不知道如何指定遮罩。我尝试了一下,但从未得到想要的结果。 (箭头显示在两个边界(第2和第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位的值。要设置它,你需要翻转与每一个应该为保证金启用标志号码对应的位:

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

然后,你需要定义标记自己:

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

所以你可以最后将它们添加到特定行:

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