vs2005 为函数自动添加注释

a) 自动添加文件注释  效果如下:

/*
 * Copyright(C) 2012,Company 保留所有权利。( All rights reserved. )
 * 
 * 文件名称:TEDlg.cpp
 * 摘    要:
 * 当前版本:1.0
 * 作    者:YuJian
 * 创建日期:2012年3月18日
 */


 

b) 自动添加函数注释 效果如下:

//-----------------------------------------------------------
//     
//  函数名称:CTEDlg::OnInitDialog
//     
//  参    数: -无
//     
//  返    回:BOOL
//     
//  函数作用:
//     
//  修改日期:2012年3月18日  By YuJian
// 
//-----------------------------------------------------------


 

所使用的途径 是:编写宏

而在,编写宏之前,要给VS2005安装补丁文件 ,否则 vs2005无法执行宏

英文补丁 431M

http://download.microsoft.com/download/6/3/c/63c69e5d-74c9-48ea-b905-30ac3831f288/VS80sp1-KB926601-X86-ENU.exe

中文补丁
http://download.microsoft.com/download/8/0/7/8071514d-9370-45c3-8af1-4ff09a70e59d/VS80sp1-KB926604-X86-CHS.exe

 

安装好了以后,就可以编写自动注释函数的宏了。。。

由于是VB,以前没用过,因此借鉴网上的程序,自己根据需要稍微修改了下

 

        1 建立宏项目

    工具→宏→新建宏项目,输入文件名称,并选择要保存的位置

    将下面的代码复制到Module1模块,保存。

 

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics

Public Module Module1
    ' --------------------------------------------------
    ' 生成文件说明注释
    ' --------------------------------------------------
    Sub FileDescription()
        Dim gAuthor As String = "YuJian"
        Dim gCompany As String = "Company"

        Dim outTextDoc As TextDocument
        Dim outText As EditPoint

        DTE.ActiveDocument.Selection.GotoLine(1)
        outTextDoc = DTE.ActiveDocument.Object("TextDocument")
        outText = outTextDoc.StartPoint.CreateEditPoint()
        outText.Insert("/*" + vbCrLf)
        outText.Insert(" * Copyright(C) " + Date.Today.Year.ToString() + "," + gCompany + " 保留所有权利。( All rights reserved. )" + vbCrLf)
        outText.Insert(" * " + vbCrLf)
        outText.Insert(" * 文件名称:" + DTE.ActiveDocument.Name + vbCrLf)
        outText.Insert(" * 摘    要:" + vbCrLf)
        outText.Insert(" * 当前版本:1.0" + vbCrLf)
        outText.Insert(" * 作    者:" + gAuthor + vbCrLf)
        outText.Insert(" * 创建日期:" + Date.Today.ToLongDateString() + vbCrLf)
        outText.Insert(" */" + vbCrLf)
        DTE.ActiveDocument.Selection.GotoLine(10)
    End Sub

    ' --------------------------------------------------
    ' 生成函数说明注释
    ' --------------------------------------------------
    Sub FunctionRemark()
        Dim preSpaceCount As Integer = 0   ' 注释前面的空格数, 缩进(单位:字符)
        Dim outTextDoc As TextDocument
        Dim outText As EditPoint
        Dim iCurrentLineNumber As Integer

        iCurrentLineNumber = DTE.ActiveDocument.Selection.CurrentLine '.ToString()
        outTextDoc = DTE.ActiveDocument.Object("TextDocument")
        outText = outTextDoc.StartPoint.CreateEditPoint()
        ' 移动文本输入点到指定行上
        outText.MoveToLineAndOffset(iCurrentLineNumber, 1)
        Dim strSpace As String = ""
        Dim iSpaceIndex As Integer
        For iSpaceIndex = 1 To preSpaceCount
            strSpace = strSpace + " "
        Next
        outText.Insert(strSpace + "//-----------------------------------------------------------" + vbCrLf)
        outText.Insert(strSpace + "// 函数名称:" + vbCrLf)
        outText.Insert(strSpace + "//     " + vbCrLf)
        outText.Insert(strSpace + "// 参数:" + vbCrLf)
        outText.Insert(strSpace + "//    - " + vbCrLf)
        outText.Insert(strSpace + "// 返回:" + vbCrLf)
        outText.Insert(strSpace + "//     " + vbCrLf)
        outText.Insert(strSpace + "// 说明:" + vbCrLf)
        outText.Insert(strSpace + "//     " + vbCrLf)
        outText.Insert(strSpace + "//-----------------------------------------------------------" + vbCrLf)
    End Sub

    ' --------------------------------------------------
    '
    ' 函数注释解析部分
    '
    ' --------------------------------------------------
    Public Structure ITEMDATA
        Public itemType As Integer
        Public itemText As String
    End Structure
    Public lItemList As New System.Collections.Generic.List(Of ITEMDATA)(4)
    Private Function ParseFunctionDescription(ByVal funText As String) As Boolean
        Dim strItem As String
        Dim idata As ITEMDATA
        Dim strSplit As String() = funText.Split("(")

        If strSplit.Length = 1 Then
            Return False
        End If

        '解析函数名称部分
        If strSplit.Length > 2 Then
            strItem = strSplit(strSplit.Length - 2).Trim()
        Else
            strItem = strSplit(0).Trim()
        End If
        Dim strHeadSplit As String() = strItem.Split(" ")
        strItem = strHeadSplit(strHeadSplit.Length - 1).Trim()
        idata.itemType = 1
        idata.itemText = strItem.Trim()
        lItemList.Add(idata)

        '解析参数部分
        strItem = strSplit(strSplit.Length - 1).Trim()
        If strItem.Substring(0, 1) <> ")" Then
            Dim iend As Integer = strItem.IndexOf(")", 0)
            Dim strParams As String = strItem.Substring(0, iend).Trim()
            Dim strParamSplit As String() = strParams.Split(",")
            For Each strItem In strParamSplit
                idata.itemType = 2
                idata.itemText = strItem.Trim()
                lItemList.Add(idata)
            Next strItem
        Else
            idata.itemType = 2
            idata.itemText = "无参数"
            lItemList.Add(idata)
        End If
        '解析返回值类型
        Dim iIndex As Integer
        For iIndex = 0 To strHeadSplit.Length - 2
            idata.itemType = 3
            idata.itemText = strHeadSplit(iIndex).Trim()
            lItemList.Add(idata)
        Next iIndex
        Return True
    End Function

    ' --------------------------------------------------
    '
    ' 根据函数声明生成注释
    '
    ' --------------------------------------------------
    Sub MakeFunctionRemark()
        Dim preSpaceCount As Integer = 0   ' 注释前面的空格数, 缩进(单位:字符)
        Dim outTextDoc As TextDocument
        Dim outText As EditPoint
        Dim iCurrentLineNumber As Integer
        Dim iLineLength As Integer
        Dim strFunText As String
        Dim iItemIndex As Integer
        Dim idata As ITEMDATA

        lItemList.Clear()

        iCurrentLineNumber = DTE.ActiveDocument.Selection.CurrentLine.ToString()
        outTextDoc = DTE.ActiveDocument.Object("TextDocument")
        outText = outTextDoc.StartPoint.CreateEditPoint()
        ' 移动文本输入点到指定行上
        outText.MoveToLineAndOffset(iCurrentLineNumber, 1)
        iLineLength = outText.LineLength
        strFunText = outText.GetText(iLineLength)
        iLineLength = strFunText.Trim().Length
        '但前行没有内容直接返回
        If iLineLength = 0 Then
            Return
        End If

        ' 解析函数名称
        Dim bResult As Boolean = ParseFunctionDescription(strFunText.Trim())
        If bResult = False Then
            lItemList.Clear()
            Return
        End If

        Dim pcount As Integer = 0
        Dim rcount As Integer = 0
        Dim strSpace As String = ""
        Dim iSpaceIndex As Integer
        For iSpaceIndex = 1 To preSpaceCount
            strSpace = strSpace + " "
        Next
        outText.Insert(strSpace + "//-----------------------------------------------------------" + vbCrLf)
        For iItemIndex = 0 To lItemList.Count - 1
            idata = lItemList.Item(iItemIndex)
            Select Case idata.itemType
                Case 1
                    outText.Insert(strSpace + "//     " + vbCrLf)
                    outText.Insert(strSpace + "//  函数名称:" + idata.itemText + vbCrLf)

                    outText.Insert(strSpace + "//     " + vbCrLf)
                Case 2

                    If idata.itemText = "无参数" Then
                        outText.Insert(strSpace + "//  参    数: -无" + vbCrLf)
                        outText.Insert(strSpace + "//     " + vbCrLf)

                    Else
                        If pcount = 0 Then
                            outText.Insert(strSpace + "//  参    数:" + vbCrLf)
                        End If
                        pcount = pcount + 1
                        outText.Insert(strSpace + "//    - " + idata.itemText + vbCrLf)
                        outText.Insert(strSpace + "//     " + vbCrLf)
                    End If

                Case 3
                    If rcount = 0 Then
                        outText.Insert(strSpace + "//  返    回:" + idata.itemText + vbCrLf)
                        outText.Insert(strSpace + "//     " + vbCrLf)
                    End If
                    rcount = rcount + 1
                Case 4
                Case 5
            End Select
        Next
        outText.Insert(strSpace + "//  函数作用:" + vbCrLf)
        outText.Insert(strSpace + "//     " + vbCrLf)

        outText.Insert(strSpace + "//  修改日期:" + Date.Today.ToLongDateString() + "  By YuJian" + vbCrLf)
        outText.Insert(strSpace + "// " + vbCrLf)

        outText.Insert(strSpace + "//-----------------------------------------------------------" + vbCrLf)

        lItemList.Clear()   '清楚所有元素
    End Sub



End Module


 

将宏项目加载后, 在宏资源器中,便会发现该项目有三个宏方法:

 

FileDescription :  是为整个文件添加注释

FunctionRemark: 为函数添加注释------(很粗糙的  信息需要自己输入,这是中间函数  )

MakeFunctionRemark:  自动为函数添加注释

 

我们需要的是 FileDescription  和MarkFunctionRemark这两个宏函数。

分别双击它们,便可建立文件注释和函数注释。  不过,建立函数注释前, 光标必须位于函数定义处。

 

c) 对语句进行说明

/******************************    add by yujian 2012年5月8日 10:19   *************************************/

	if (FontType&RASTER_FONTTYPE)
	{
		return TRUE;
	}

/******************************    add by yujian 2012年5月8日 10:19   *************************************/


 

代码:

 

    ' --------------------------------------------------
    ' 生成函数语句说明注释
    ' --------------------------------------------------
    Sub FunctionRemark()

        Dim preSpaceCount As Integer = 0   ' 注释前面的空格数, 缩进(单位:字符)
        Dim outTextDoc As TextDocument
        Dim outText As EditPoint
        Dim iCurrentLineNumber As Integer

        ' iCurrentLineNumber = DTE.ActiveDocument.Selection.CurrentLine '.ToString()

        iCurrentLineNumber = DTE.ActiveDocument.Selection.TopLine

        outTextDoc = DTE.ActiveDocument.Object("TextDocument")
        outText = outTextDoc.StartPoint.CreateEditPoint()
        ' 移动文本输入点到指定行上
        outText.MoveToLineAndOffset(iCurrentLineNumber - 1, 1)
        Dim strSpace As String = ""
        Dim iSpaceIndex As Integer
        For iSpaceIndex = 1 To preSpaceCount
            strSpace = strSpace + " "
        Next
        outText.Insert(strSpace + "/******************************   " + " add by yujian " + Date.Today.ToLongDateString() + " " + Date.Now.Hour.ToString + ":" + Date.Now.Minute.ToString + "   *************************************/" + vbCrLf)
        ' outText.Insert(strSpace + vbCrLf)
        '  outText.Insert(strSpace + "/******************************   " + " add by yujian " + Date.Today.ToLongDateString() + " " + Date.Now.Hour.ToString + ":" + Date.Now.Minute.ToString + "   *************************************/" + vbCrLf)


        iCurrentLineNumber = DTE.ActiveDocument.Selection.BottomLine + 1

        ' 移动文本输入点到指定行上
        outText.MoveToLineAndOffset(iCurrentLineNumber + 1, 1)
        outText.Insert(strSpace + "/******************************   " + " add by yujian " + Date.Today.ToLongDateString() + " " + Date.Now.Hour.ToString + ":" + Date.Now.Minute.ToString + "   *************************************/" + vbCrLf)



        
    End Sub


 

 

 

2 建立快捷键

 

在源项目工程中【不是在宏项目中】  依次选择

工具→选项→环境→键盘

设置用来运行宏的快捷键,注意不要和已有的快捷键相冲突。

 

比如:  建立文件注释  快捷键为: ALT+A

              建立函数注释 快捷键为: ALT+R

 

 

 

 

参考资料:

http://z.chao.yue.blog.163.com/blog/static/13086262020114210373211/

http://www.cppblog.com/eday/archive/2007/07/15/28079.html

http://pppboy.blog.163.com/blog/static/3020379620091030111611858/

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值