gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:20 26 4
gpt4 key购买 nike

我无法理解 Scintilla 标记如何绑定(bind)到边距。假设我想要 3 个边距。第一个用于行号(这里没问题),第二个仅用于箭头标记,第三个仅用于圆形标记。我从文档中知道我必须指定 marginmasks 才能将标记绑定(bind)到边距,但我不知道如何指定掩码。我试了一下,但没有得到想要的结果。 (要么箭头显示在两个边距(第 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 没有圆圈标记。如果有人能解释如何设置 mask ,我会很高兴。

最佳答案

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

关于c++ - 如何在 Scintilla 中设置边距掩码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27060255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com