【问题标题】:How to set margin masks in Scintilla?如何在 Scintilla 中设置边距蒙版?
【发布时间】:2014-11-21 11:26:08
【问题描述】:

我无法理解 Scintilla 标记如何绑定到边距。 假设我想要 3 个边距。第一个用于行号(这里没问题),第二个仅用于箭头标记,第三个仅用于圆形制造商。我从文档中知道我必须指定边距掩码才能将标记绑定到边距,但我不知道如何指定掩码。我尝试了一下,但从未得到想要的结果。 (要么箭头显示在两个边距(第 2 和第 3)上,要么没有突出显示符号,而是突出显示了行)。希望有人能告诉我如何设置marginmasks。

/* 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 没有圆形标记。如果有人能解释如何设置蒙版,我会很高兴。

【问题讨论】:

    标签: c++ scintilla


    【解决方案1】:

    有 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);
    

    【讨论】:

      猜你喜欢
      • 2021-07-23
      • 1970-01-01
      • 2011-05-19
      • 2022-10-21
      • 1970-01-01
      • 2011-05-06
      • 2012-09-16
      • 2017-12-15
      • 1970-01-01
      相关资源
      最近更新 更多