C++ 如何在闪烁中设置边缘遮罩?

C++ 如何在闪烁中设置边缘遮罩?,c++,scintilla,C++,Scintilla,我很难理解闪烁标记是如何绑定到边缘的。 假设我想要3页边距。第一个用于线号(此处无问题),第二个仅用于箭头标记,第三个仅用于圆生成器。从文档中我知道,我必须指定marginmask来将标记绑定到边距,但我不知道如何指定掩码。我试了一下,但没有得到想要的结果。(两个边框(第二和第三个)上都显示了箭头,或者没有突出显示符号,而是线条高亮显示)。希望有人能教我如何设置Marginmask /* 2nd marker margin -> only arrows */ Call(SCI_SETMAR

我很难理解闪烁标记是如何绑定到边缘的。 假设我想要3页边距。第一个用于线号(此处无问题),第二个仅用于箭头标记,第三个仅用于圆生成器。从文档中我知道,我必须指定marginmask来将标记绑定到边距,但我不知道如何指定掩码。我试了一下,但没有得到想要的结果。(两个边框(第二和第三个)上都显示了箭头,或者没有突出显示符号,而是线条高亮显示)。希望有人能教我如何设置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);
/*第二标记边距->仅箭头*/
调用(SCI_设置边际类型,1,SC_边际符号);
调用(SCI_SETMARGINWIDTHN,1,20);
调用(SCI_SETMARGINSENSITIVEN,1,1);
呼叫(SCI_SETMARGINMASKN,1,SCI_MARK_ARROW);//只有圆圈*/
调用(SCI_设置边际类型,2,SC_边际符号);
调用(SCI_SETMARGINWIDTHN,2,50);
调用(SCI_SETMARGINSENSITIVEN,2,1);
定义标记器(2,SC_标记_圆,0xffffff,0x00ff00);

呼叫(SCI_SETMARGINMASKN,2,SC_MARK_CIRCLE);// 有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
因此,您最终可以将它们添加到特定行:

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