`
ldb19890624
  • 浏览: 243549 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

TabBars代码解读之——代码注释与恢复功能

 
阅读更多
<!-- Search Google -->
Google 输入您的搜索字词 提交搜索表单
<!-- Search Google -->

代码注释就是讲文档窗口中选择的文本编程C/C++语言的注释块,TabBars插件设置这个功能主要是为了简化编程过程中的操作。通常用C风格注释一段代码需要在代码的开始添加/*,并在代码的结束添加*/,用C++风格则是在每行的行首添加//,如果要恢复这些代码就需要再删除这些符号。TabBars插件提供了自动添加和去处这些注释符号的功能,还支持在代码开始处插入时间戳等信息。

添加注释符号有两种风格:C风格和C++风格。TabBars虽然提供了两种风格的注释符号添加方式,但是在某些情况下的处理方式是一样的,比如,当TabBars判断出选择的文本是一行代码中的一段时,通常只使用/**/方式,因为多数情况下用户这样选择是为了注释函数参数或替换表示符,使用/**/更符合用户的意图。

添加注释符号需要首先从文档中得到当前选择的文本块,使用ITextDocument的get_Selection可以得到一个ITextSelection对象,通过ITextSelection对象的四个属性:TopLine,BottomLine,CurrentLine和CurrentColumn可以得到N当前选择的文本的四个位置坐标,这些坐标以行和字符为单位,这几个坐标就是TabBars判断用户是选择了一行代码还是一段代码的依据。以下代码就是对用户选择进行判断并对文本块添加C风格的注释符号的过程:

strText = bstr;
long lStart = 0,lEnd = 0,iColEnd = 0,lCurrent;
pSel->get_TopLine(&lStart);
pSel->get_BottomLine(&lEnd);
pSel->get_CurrentLine(&lCurrent);
pSel->get_CurrentColumn(&iColEnd);
if(lStart == lEnd) //选择在一行上
{
if((lCurrent == lEnd) && (iColEnd > 1))//不是一整行
{
strTmp.Format(_T("/*%s*/"),strText);//依然使用/**/
bstr = strTmp;
pSel->put_Text(bstr);
}
else if((lCurrent == (lEnd + 1)) && (iColEnd == 1))//是一整行
{
strTmp.Format(_T("//%s"),strText);//使用//
bstr = strTmp;
pSel->put_Text(bstr);
}
}
else//选择了多行
{
int idx = 0;
int totalline = lEnd - lStart + 1;

strTmp = _T("/*"); //注释开始符号
if(g_bAddTime && g_bAddUser) //判断是否添加附加注释信息
{
CString strtt;
strTmp += _T("@**#---");//附加信息开始标志
if(g_bAddTime)
{
SYSTEMTIME st;
::GetLocalTime(&st);
strtt.Format(_T("%04d-%02d-%02d %02d:%02d:%02d "),st.wYear,st.wMonth,
st.wDay,st.wHour,st.wMinute,st.wSecond);
strTmp += strtt;
}
if(g_bAddUser)
{
strtt.Format(_T("(%s)"),g_szUser);
strTmp += strtt;
}
strTmp += _T("---#**@");//附加信息结束标志
}
strTmp += _T("/r/n");
strTmp += strText;
strTmp += _T("*/");//注释结束符号

bstr = strTmp;
pSel->put_Text(bstr);//替换选择的文本
}

添加C++风格的注释处理单行文本时和上面的过程一样,但是在处理多行文本时稍有不同,具体就是在每行的行首插入//符号。

恢复代码的过程就是讲注释符号从选择的文本中删除的过程,TabBars插件可以自动识别注释的风格并自动删除注释符号。对于使用/**/注释的文本,选择取消注释时并不一定要严格地选择从/*开始到*/结束的文本,多一点少一点没关系,TabBars插件会自动匹配注释符号。至于使用C++风格的块注释,TabBars会删除每一行的第一个//匹配,不影响其他的行内注释:

strTmp = lpszNull;
int idx = 0;
while((idx = strText.Find(_T("//"),idx)) != -1)
{
bChange = TRUE;
strTmp += strText.Left(idx);
strText = strText.Mid(idx + 2); //过滤 //
idx = strText.Find(_T("/r/n"),0);//跳到行尾
strTmp += strText.Left(idx + 2);//
strText = strText.Mid(idx + 2);//从新行开始找
idx = 0;
}
strTmp += strText;//It is not a good idea, but can void many bugs

分享到:
评论

相关推荐

    TabBars---VC6 IDE增强插件

    持此之外,TabBars还添加了很多实用的功能,比如自动保存文件,C++程序文件和头文件互相切换支持多目录搜索功能,注释选定的代码块,从注释的代码块中恢复代码,为函数添加格式化函数声明,注释代码时自动添加操作者...

    TabBars多标签插件,VC6用,比WndTabs更好用!

    不多说了,用过的都知道,基于WndTabs开发,功能更强大,该zip带有bin文件和源代码! 不需要研究代码的,直接把demo_cn目录下的TabBars.ini和TabBars.dll复制到C:\Program Files\Microsoft Visual Studio\Common\...

    好用的vctabBars

    “vctabBars”是一款专为VC6.0设计的增强型控件库,它提供了强大的多标签栏功能,使得开发者可以更方便地管理代码窗口、资源视图等。在传统VC6.0环境中,代码编辑器、类视图、资源编辑器等窗口通常是并排显示,占据...

    Tabbar1.17

    如果你对编程感兴趣,你可以深入研究其源代码,学习它是如何实现这些功能的,甚至添加新的功能以满足个人或团队的工作流程。 4. **兼容性**:由于提及的是VC,我们可以推断这个工具主要适用于Microsoft Visual ...

    Tabbar VCAddIns

    它包含了用于在VC6中添加和管理选项卡的代码,通过与IDE交互,使用户可以在多个文档之间快速切换,如同现代版本的Visual Studio那样。 2. **TabBars.ini**:这是配置文件,用于存储用户的自定义设置和扩展的配置...

    自定义tabBar

    在iOS和Android应用开发中,TabBar通常作为底部导航栏使用,用于展示多个主要功能间的切换。本主题聚焦于如何自定义TabBar,以便更好地适应应用程序的视觉风格和交互需求,同时移除系统的默认TabBar。 一、iOS中的...

    一个taro适配Android、iOS、微信小程序、H5最佳实践项目的脚手架

    taro适配Android、iOS、微信小程序、H5最佳实践,主要涉及到了基础网络请求的封装、适配了多端的SafeArea安全区域、style工具样式引用替换scss的繁琐写法大幅度简化代码,同时解决了scss样式无法通过className进行属性...

    Beginning iOS 10 Programming with Swift.pdf

    2. iOS 10新特性介绍:书中讨论了iOS 10系统引入的一些新功能和改进之处。学习这些新特性可以帮助开发者在开发应用时能够更好地利用系统提供的新工具和API。 3. 实战应用开发:作者承诺将会展示如何从零开始在Swift...

    Beginning iOS 10 Programming With Swift 英文

    19. 在设备上部署和测试iOS应用也是本书的重点之一,作者分享了如何在真实设备上测试应用和使用TestFlight进行Beta测试。 20. 最后,书中还介绍了如何将iOS应用提交到App Store,以及如何利用3D Touch等新技术提升...

    Telerik_UI_for_Xamarin_2018_2_620_2_Dev_Downloadly.ir.msi.rar

    1. **导航和布局**:如NavigationBars、TabBars、SplitViews等,帮助开发者构建直观的导航结构。 2. **数据输入和展示**:包括各种输入控件(如TextViews、DatePickers、Spinners)和展示控件(ListView、GridView...

    Beginning iOS 6 Development: Exploring the iOS SDK

    第6章和第7章分别探讨了多视图应用程序的构建和使用TabBars和Pickers组件,这些都是构建复杂界面和功能的基础。 第8章到第9章引导读者了解UITableView的基本概念和高级应用,包括如何与NavigationControllers结合来...

    H5底部tabbar模板,基于vant组件库及使用最新脚手架搭建

    基于vue开发H5,使用vant的UI组件开发界面,该简单模板 ...3. 使用vuex管理底部tabbars的数据,实现权限控制; 4. 下拉刷新,加载更多示例; 5. 使用上下布局,实现局部更新,支持显示隐藏标题,底部tabbars更新;

    ios6基础教程(Beginning iOS 6 Development)英文版

    8. Tab Bars和Pickers的使用:在“Chapter7: TabBars and Pickers”中,会介绍如何创建标签栏(Tab Bar)和选择器(Pickers)来增强用户界面,让应用程序更加易于使用。 9. Table Views和Navigation Controllers:...

    (iPhone开发基础教程)Beginning iOS 5 Development Exploring the iOS SDK

    - Chapter 12: Application Settings and UserDefaults - 涉及应用程序的设置管理,包括如何存储和恢复用户偏好设置。 - Chapter 13: Basic Data Persistence - 基本数据持久化,涉及如何在应用中存储数据(包括使用...

Global site tag (gtag.js) - Google Analytics