编写VSIP扩展 - 折叠代码区域(region)

本文介绍了一个方法,用于在源代码编辑器中创建隐藏区域。通过精确指定开始和结束位置,可以隐藏特定部分的代码,并设置一个横幅来标记该区域。如果相同范围的隐藏区域已存在,则会先取消其隐藏状态。
private void OnCreateHiddenRegion(ExecuteEventArgs ea)
{
     IVsHiddenTextSession Session 
= 
GetHiddenTextSession(DXCoreEngine.Source.Active);

     TextSpan Span 
= new TextSpan();
     SourceRange Range 
= DXCoreEngine.Source.Active.Range;
     Span.iStartLine 
= Range.Start.Line - 1;
     Span.iStartIndex 
= Range.Start.Offset - 1;
     Span.iEndLine 
= Range.End.Line - 1;
     Span.iEndIndex 
= Range.End.Offset - 1;

     IVsEnumHiddenRegions ExistingRegionsEnumerator 
= null;
     Session.EnumHiddenRegions(
00nullout ExistingRegionsEnumerator);
     
uint ExistingCount = 0;
     ExistingRegionsEnumerator.GetCount(
out ExistingCount);
     
if (ExistingCount > 0)
     {
         IVsHiddenRegion[] ExistingRegions 
= new 
IVsHiddenRegion[ExistingCount];
         
uint pcElFetched = 0;
         ExistingRegionsEnumerator.Next(ExistingCount, ExistingRegions, 
out pcElFetched);

         
foreach (IVsHiddenRegion Canidate in ExistingRegions)
         {
             TextSpan[] SpanRetrieverArra1 
= new TextSpan[1];
             Canidate.GetSpan(SpanRetrieverArra1);
             TextSpan SpanCanidate 
= SpanRetrieverArra1[0];
             
if ((SpanCanidate.iStartLine    == Span.iStartLine) &&
                 (SpanCanidate.iStartIndex   
== Span.iStartIndex) &&
                 (SpanCanidate.iEndLine      
== Span.iEndLine) &&
                 (SpanCanidate.iEndIndex     
== Span.iEndIndex))
             {
                 Canidate.Invalidate(
0);
                 
return;
             }
         }
     }

     
string Banner = 
DXCoreEngine.Documents.ActiveTextDocument.GetLine(Range.Start.Line);
     Banner 
= Banner.TrimStart();
     Banner 
= Banner.TrimEnd();

     NewHiddenRegion[] NewHiddenRegionArray 
= new NewHiddenRegion[1];
     NewHiddenRegionArray[
0].dwBehavior = 1;
     NewHiddenRegionArray[
0].dwClient = 0x2cff;
     NewHiddenRegionArray[
0].dwState = 0;
     NewHiddenRegionArray[
0].iType = 1;
     NewHiddenRegionArray[
0].pszBanner = Banner;
     NewHiddenRegionArray[
0].tsHiddenText = Span;

     Session.AddHiddenRegions(
01, NewHiddenRegionArray, null);
}

转载于:https://www.cnblogs.com/jintan/archive/2009/07/02/1515838.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值