Scintilla笔记(4)

Scintilla笔记(4)
Scintilla增加Marker
本节讲解一下怎样在Scintilla中添加Marker、以及Marker定义.。

在开始之前首先了解一下编辑器中两个控件页边(Margins)和标记(Markers)

  • 页 边(Margins):页边是位于文本显示区左边的一竖条区域,它可以用于显示行 号、书签、断点标记等东东。Scintilla最多可以有5个页边(从左 到右的编号为0~4),每个页边可以使用SCI_SETMARGINTYPEN命令确定是用于显示行号还是符号。我们可以用 SCI_SETMARGINWIDTHN命令控制一个页边的宽度,如果设置为0,则表示不显示该页边。默认是只显示宽度为16的1号页边。
  • 标 记(Markers): 标记,不用说也知道是用来标记文本位置(确切地说,是文本行)的。我们可以使用32种标记(编号0~31),我们可以自由决定这 32种标记的意义,如标记0用来表示断点、标记1~10表示书签、标记20表示语法错误行等等。不过,如果编辑器要支持代码折叠功能,我们得把标记 25~31留出来,把这7个标记作为代码折叠专用标记(后面还会讲到)。
开始添加Marker:
首先我们要告诉编辑器,要在哪一个页边(Margin)中添加标记,此时可自定义
m_ScintillaEdit.SetMarginTypeN(1, SC_MARGIN_SYMBOL);  // 假设我们在第二个页边中添加标记(Marker)
m_ScintillaEdit.SetMarginSensitiveN(2, TRUE);     //第二个页边中可以接收鼠标事件消息

根据源码可知,默认第一个Margin显示行号默认不显示行号、第二个Margin显示标记切宽度为16、第三个Margin显示标记且默认不显示,如图所示:


其中折叠、展开也为Marker,所以在笔记(3)中所讲,设置折叠标记属性,如下:


    m_ScintillaEdit.SetMarginTypeN(2, SC_MARGIN_SYMBOL); //设置2号Margin用于显示折叠标记(Marker)
    m_ScintillaEdit.SetMarginMaskN(2, SC_MASK_FOLDERS);   //设置2号Margin页边掩码为折叠
    m_ScintillaEdit.SetFoldLevel(2, SC_MASK_FOLDERS);

接下来我们就可以通过
m_ScintillaEdit.MarkerAdd(line, marker_num); 添加Marker

第一个参数为行号,比较好理解,此时重点说一下第二个参数markerNum。
由于标记(Markers)可以有32中标记、其中25-31是留个折叠使用的,所以也只有25中可以留给我们自己定义
比如,我们定义0号的Marker为断点、1号的Marker为属性、2号断点为错误行,所以此时的0、1、2号则就是为markeNum。那么怎么定义0号的Marker为断点、1号的Marker为属性、2号断点为错误行呢?
可以通过接口m_ScintillaEdit.MarkerDefine(0 , SC_MARK_ROUNDRECT);  // 设置0号Marker为圆矩形
m_ScintillaEdit.MarkerDefine(1 , SC_MARK_ARROW);  // 设置1号Marker位箭头
m_ScintillaEdit .MarkerDefinePixmap(2, reinterpret_cast<char *>(error_xpm)); //设置为自定义的图片
这样我们就可以直接调用MarkerAdd添加Marker了。

接下来讲一下MarkerGet接口,MarkerGet函数是获取当前行是否设置了Marker,并且获取Marker的类型。
如在第一行中设置了0号Marker,此时调用MarkerGet后得到结果为0x01,即0x00000001,表示第一位为1,说明设置了0号Marker
如在第一行中设置了2号Marker,此时条用MarkerGet后得到结果为0x04,即0x00000002,表示第三位为1,说明设置了2号Marker
。。。
此时即可使用代码判断是否设置了某个Marker,如下:
if(m_ScintillaEdit.MarkerGet(0) & 0x00000001 != 0)
     设置了0号Marker
else if (m_ScintillaEdit.MarkerGet(0) & 0x00000002 != 0 )
     设置了1号Marker
else if(m_ScintillaEdit.MarkerGet(0) & 0x00000004 != 0 )
     设置了2号Marker
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值