如何在Scintilla中设置边距掩码?

时间:2014-11-21 11:26:08

标签: c++ scintilla

我很难理解Scintilla标记是如何绑定到边距的。 可以说我想要3个利润。第一个是亚麻布(这里没问题),仅第二个用于箭头标记,第三个用于圆形制造商。我从文档中知道我必须指定marginmasks将标记绑定到边距,但我不知道如何指定掩码。我试了一下但从未得到想要的结果。 (箭头显示在两个边缘(第2和第3)或没有突出显示符号,而是高亮显示的线条)。希望有人能告诉我如何设置marginmask。

/* 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的圆圈标记。如果有人可以解释如何设置掩码,我会很高兴。

1 个答案:

答案 0 :(得分: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);