青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開(kāi)心的工作
簡(jiǎn)單、開(kāi)放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
http://www.moon-soft.com/doc/7553.htm

當(dāng)公司要求你用統(tǒng)一的格式寫(xiě)函數(shù)注釋時(shí),這個(gè)小東西也許可以幫些忙。



ma2jun@sina.com



設(shè)計(jì)目標(biāo):





1. 自動(dòng)提取函數(shù)名稱(chēng);2. 自動(dòng)提取函數(shù)功能注釋?zhuān)僭O(shè)在頭文件中);3. 自動(dòng)列出參數(shù)列表;4.自動(dòng)提取返回值;5.自動(dòng)填寫(xiě)作者及日期(作者名稱(chēng)可以設(shè)置)



例如:



//------------------------------------------------
// 名稱(chēng):CDSAddIn::OnConnection
// 功能:
// 參數(shù):[IApplication* pApp] ---
//?????? [VARIANT_BOOL bFirstTime] ---
//?????? [long dwCookie] ---
//?????? [VARIANT_BOOL* OnConnection] ---
// 返回:STDMETHODIMP ---
// 作者:麻軍? 2002-3-4
//------------------------------------------------
STDMETHODIMP CDSAddIn::OnConnection(IApplication* pApp, VARIANT_BOOL bFirstTime, long dwCookie, VARIANT_BOOL* OnConnection)



設(shè)計(jì)思想:





1. 使用IDSAddIn接口;2. 設(shè)計(jì)CCmtBlock(COMMENT BLOCK)類(lèi)維護(hù)注釋中的各個(gè)字段,用來(lái)提供擴(kuò)展靈活性。



實(shí)現(xiàn):



//-----------------------------------------------------------------------------------------------------



// CmtBlock.h: interface for the CCmtBlock class.
//
//////////////////////////////////////////////////////////////////////



#if !defined(AFX_CMTBLOCK_H__51B4002A_A935_4764_80B5_03103D5E716E__INCLUDED_)
#define AFX_CMTBLOCK_H__51B4002A_A935_4764_80B5_03103D5E716E__INCLUDED_



#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <vector>



class CCmtBlock?
{
public:
?CCmtBlock();
?~CCmtBlock();



private:
?CString m_szBegin;?????? // 注釋首行(hard coded)
?CString m_szName;??????? // 函數(shù)名稱(chēng)(auto)
?CString m_szPurpose;???? // 函數(shù)功能(auto)
?CString m_szParam;?????? // 函數(shù)參數(shù)列表(auto)
?CString m_szReturn;????? // 函數(shù)返回(can change)
?CString m_szAuthor;????? // 函數(shù)作者(auto)
?CString m_szEnd;???????? // 注釋尾行(hard coded)



?CString m_szFuncDefine;? // 函數(shù)定義(自動(dòng)獲得)
//?CString m_szBlock;?????? // 函數(shù)注釋塊



?std::vector< CString* > m_arrSort;? // 注釋部分的排列順序



private:
?void ExtractName();????? // 提取名稱(chēng)
?void ExtractPurpose();?? // 提取功能
?void ExtractParam();???? // 提取參數(shù)列表
?void ExtractReturn();??? // 提取返回類(lèi)型
?void ComposeAuthorAndDate(); // 編輯作者和日期時(shí)間



public:
?void SetFunctionDefine( CString szFuncDefine );?? // 設(shè)置函數(shù)定義(自動(dòng)獲得)
?CString ComposeComment();?? // 編輯函數(shù)注釋
?void SetPurpose( CString& szFuncPurpose ) {
??m_szPurpose = szFuncPurpose; }? // 設(shè)置函數(shù)頭文件中的注釋



};



#endif // !defined(AFX_CMTBLOCK_H__51B4002A_A935_4764_80B5_03103D5E716E__INCLUDED_)



//-----------------------------------------------------------------------------------------------------



// CmtBlock.cpp: implementation of the CCmtBlock class.
//
//////////////////////////////////////////////////////////////////////



#include "stdafx.h"
#include "AutoComment.h"
#include "CmtBlock.h"



#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif



//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////



CCmtBlock::CCmtBlock()
{
?m_szBegin = _T("http://------------------------------------------------\r\n");
?m_szEnd?? = _T("http://------------------------------------------------\r\n");



?m_arrSort.clear();
?m_arrSort.push_back( &m_szBegin );
?m_arrSort.push_back( &m_szName );
?m_arrSort.push_back( &m_szPurpose );
?m_arrSort.push_back( &m_szParam );
?m_arrSort.push_back( &m_szReturn );
?m_arrSort.push_back( &m_szAuthor );
?m_arrSort.push_back( &m_szEnd );
}



CCmtBlock::~CCmtBlock()
{
?m_arrSort.clear();
}



void CCmtBlock::ExtractName()
{
?int iPosSpace = m_szFuncDefine.FindOneOf(_T(" "));
?int iPosBracket = m_szFuncDefine.FindOneOf(_T("("));
?CString szName = m_szFuncDefine.Mid( iPosSpace, iPosBracket-iPosSpace );
?szName.TrimLeft();
?szName.TrimRight();
?m_szName = _T("http:// 名稱(chēng):") + szName + _T("\r\n");
}



void CCmtBlock::ExtractPurpose()
{
?CString szTemp = m_szPurpose;
?m_szPurpose = _T("http:// 功能:") + szTemp + _T("\r\n");
}



void CCmtBlock::ExtractParam()
{
?// 得到參數(shù)表
?int iPosLeftBracket = m_szFuncDefine.FindOneOf(_T("("));
?int iPosRightBracket = m_szFuncDefine.ReverseFind(_T(')'));
?CString szParamTable = m_szFuncDefine.Mid( iPosLeftBracket+1, iPosRightBracket-iPosLeftBracket-1 );



?// 分解參數(shù)
?// 判斷是否具有參數(shù)
?szParamTable.TrimLeft();
?szParamTable.TrimRight();
?if( szParamTable == _T("") )
?{
??// 沒(méi)有參數(shù)
??m_szParam = _T("http:// 參數(shù):無(wú)\r\n");
??return;
?}
?m_szParam = _T("http:// 參數(shù):");
?int iPos1 = 0;
?int iPos2 = 0;
?CString szOneParam = _T("");
?CString szOneLine;
?int iLineCount = 0;
?szParamTable += _T(",");
?while( ( iPos2 = szParamTable.Find( _T(','), iPos1 ) ) != -1 )
?{
??iLineCount++;



??// 找到參數(shù)
??szOneParam = szParamTable.Mid( iPos1, iPos2-iPos1 );
??szOneParam.TrimLeft();
??szOneParam.TrimRight();
??if( iLineCount == 1 )
???szOneLine = _T("[") + szOneParam + _T("] --- ");
??else
???szOneLine = _T("http://?????? [") + szOneParam + _T("] --- ");
??szOneLine += _T("\r\n");



??// 添加到函數(shù)列表上
??m_szParam += szOneLine;



??iPos1 = iPos2 + 1;
?}



//?::MessageBox( NULL, szParamTable, NULL, MB_OK );



}



void CCmtBlock::ExtractReturn()
{
?CString szRet = m_szFuncDefine.Mid( 0, m_szFuncDefine.FindOneOf( _T(" ") ) );
?m_szReturn = _T("http:// 返回:") + szRet + _T(" --- \r\n");
}



extern CString g_szAuthor;? // 作者名稱(chēng)



void CCmtBlock::ComposeAuthorAndDate()
{
?CString szAuthor = g_szAuthor;//_T("Author");



?COleDateTime& date = COleDateTime::GetCurrentTime();
?CString szDate = date.Format( VAR_DATEVALUEONLY );



?m_szAuthor = _T("http:// 作者:") + szAuthor + _T("? ") + szDate + _T("\r\n");
}



void CCmtBlock::SetFunctionDefine( CString szFuncDefine )
{
?m_szFuncDefine = szFuncDefine;
}



CString CCmtBlock::ComposeComment()
{
?ExtractName();????? // 提取名稱(chēng)
?ExtractPurpose();?? // 提取功能
?ExtractParam();???? // 提取參數(shù)列表
?ExtractReturn();??? // 提取返回類(lèi)型
?ComposeAuthorAndDate(); // 編輯作者和日期時(shí)間



?CString szBlock = _T("");
?for( int i=0;i<m_arrSort.size();i++)
??szBlock += *m_arrSort[i];



?return szBlock;
}

//-----------------------------------------------------------------------------------------------------



AutoCommentCommandMethod 函數(shù)是ADDIN向?qū)ё詣?dòng)建立的那個(gè)函數(shù)



/////////////////////////////////////////////////////////////////////////////
// CCommands methods



STDMETHODIMP CCommands::AutoCommentCommandMethod()
{
?AFX_MANAGE_STATE(AfxGetStaticModuleState());



?// TODO: Replace this with the actual code to execute this command
?//? Use m_pApplication to access the Developer Studio Application object,
?//? and VERIFY_OK to see error strings in DEBUG builds of your add-in
?//? (see stdafx.h)



//?VERIFY_OK(m_pApplication->EnableModeless(VARIANT_FALSE));
//?::MessageBox(NULL, "AutoComment Command invoked.", "AutoComment", MB_OK | MB_ICONINFORMATION);
//?VERIFY_OK(m_pApplication->EnableModeless(VARIANT_TRUE));



?// 得到當(dāng)前文檔
?CComPtr<IDispatch> pDispActDocument = NULL;
?m_pApplication->get_ActiveDocument( &pDispActDocument );
?if( !pDispActDocument )
??return E_FAIL;
?CComQIPtr< ITextDocument, &IID_ITextDocument > pDoc( pDispActDocument );



?// 得到選擇對(duì)象
?CComPtr< IDispatch > pDispSelection;
?pDoc->get_Selection( &pDispSelection );
?if( !pDispSelection )
??return E_FAIL;
?CComQIPtr< ITextSelection, &IID_ITextSelection > pSelection( pDispSelection );



?// 得到函數(shù)定義(假設(shè)光標(biāo)插在函數(shù)定義中)
?//??? -- 尋找的標(biāo)志是:頭(NewLine),尾({)>> 將來(lái)實(shí)現(xiàn)
?// 選擇函數(shù)定義的第一行
?CComBSTR bstrFuncDefine;
?pSelection->SelectLine();
?pSelection->get_Text( &bstrFuncDefine );



?// 將光標(biāo)插入行的起始位置
?VARIANT var1,var2;
?VariantInit( &var1 );
?VariantInit( &var2 );
?pSelection->StartOfLine( var1, var2 );



?if( bstrFuncDefine.Length() == 0 )
??return E_FAIL;? // 不是函數(shù)定義
?USES_CONVERSION;
?CString szFuncDefine = W2A(bstrFuncDefine);
?m_CmtBlock.SetFunctionDefine( szFuncDefine );



?// 找到頭文件中函數(shù)定義的注釋
?CString& szFuncComm = FindFunctionPurposeInHeader( szFuncDefine );
?m_CmtBlock.SetPurpose( szFuncComm );



?// 構(gòu)成函數(shù)注釋字符串
?CString szBlock = m_CmtBlock.ComposeComment();
?BSTR bstrBlock;
?bstrBlock = A2W( szBlock );
?pSelection->put_Text( bstrBlock );



?return S_OK;
}



CString CCommands::FindFunctionPurposeInHeader( CString& szDefine )
{
?CString szRet;
?// 得到當(dāng)前文檔
?CComPtr<IDispatch> pDispActDocument = NULL;
?m_pApplication->get_ActiveDocument( &pDispActDocument );
?if( !pDispActDocument )
??return "";
?CComQIPtr< ITextDocument, &IID_ITextDocument > pDoc( pDispActDocument );
?if( !pDoc )
??return "";



?// 得到函數(shù)名稱(chēng)
?CString szFuncName;
?int iPosSpace = szDefine.FindOneOf(_T(":"));
?int iPosBracket = szDefine.FindOneOf(_T("("));
?szFuncName = szDefine.Mid( iPosSpace+2, iPosBracket-iPosSpace-2 );
?szFuncName.TrimLeft();
?szFuncName.TrimRight();



?// 打開(kāi)對(duì)應(yīng)的.h文件
?CComBSTR bstrFullName;
?pDoc->get_FullName( &bstrFullName );
?CString szFullName( bstrFullName );
?szFullName.MakeLower();
?CString szExt = szFullName.Right( 3 );
?if( szExt != "cpp" )?? // 不是.cpp
??return "";
?szFullName.TrimRight( "cpp" );
?szFullName += "h";? // 轉(zhuǎn)換成.h



?CStdioFile file;
?if( !file.Open( szFullName, CFile::modeRead ) )
??return "";
?CString szLine;
?CString szPurpose;
?int pos;
?while( file.ReadString( szLine ) )
?{
??// 檢查每一行是否有函數(shù)名稱(chēng)
??if( (pos=szLine.Find( szFuncName )) != -1 )
??{
???// 檢查szFuncName的前后字符是否為空格and'('
???// 構(gòu)造一個(gè)字符串在szFuncName的前后個(gè)加一個(gè)字符
???CString szTemp = szLine.Mid( pos-1, szFuncName.GetLength()+2 );
???if( szTemp.Left(1) != " " ||
????( szTemp.Right(1) != " " && szTemp.Right(1) != "(" ) )
????szRet = "";
???else
???{
????// 找到函數(shù)聲明
????// 查看當(dāng)前行的末尾有沒(méi)有注釋
????int posSplash = 0;
????if( ( posSplash = szLine.ReverseFind( '/' ) ) != -1 )
?????szRet = szLine.Right( szLine.GetLength() - posSplash - 1 );
????else
????{
?????// 查看下一行有沒(méi)有注釋
?????if( file.ReadString( szLine ) )
?????{
??????szLine.TrimLeft();
??????szLine.TrimRight();
??????if( szLine.Left(1) == "/" )
??????{
???????// 有注釋
???????szLine.TrimLeft("http://");
???????szRet = szLine;
??????}
??????else
???????szRet = "";
?????}
?????else
??????szRet = "";



????}



???}
??}



?}
?file.Close();



?szRet.TrimRight();
?szRet.TrimLeft();
?return szRet;
}


//-----------------------------------------------------------------------------------------------



// 在CDSAddIn::OnConnection函數(shù)中改寫(xiě)以下代碼,注意:CParamDlg 類(lèi)是一個(gè)輸入作者名稱(chēng)的對(duì)話(huà)框類(lèi)



?if (bFirstTime == VARIANT_TRUE)
?{
??VERIFY_OK(pApplication->
???AddCommandBarButton(dsGlyph, bszCmdName, m_dwCookie));
??// 第一次使用讓用戶(hù)輸入姓名
??CParamDlg dlgParam;
??if( dlgParam.DoModal() == IDOK )
??{
???g_szAuthor = dlgParam.m_szAuthor;
???// 存入注冊(cè)表
???::WriteProfileString("DSAddIn_AutoComment","Author",g_szAuthor);
??}
?}
?else
?{
??char szAuthor[255];
??::GetProfileString("DSAddIn_AutoComment","Author","Author",szAuthor,sizeof(szAuthor));
??g_szAuthor = CString(szAuthor);
?}



//-------------------------------------------------------------------------------------------------



希望大家能提出寶貴意見(jiàn) :-)



Ma Jun -----? ma2jun@sina.com? Jurassic xian corp.


感謝Kamp Huang給這個(gè)東東找了個(gè)家:
http://wsdnorgtypeb.51.net/kamp/zip/AutoComment.rar


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩国产黄| 一色屋精品视频免费看| 好吊成人免视频| 亚洲国产精品久久久久婷婷884 | 欧美中文在线视频| 你懂的国产精品永久在线| 欧美激情一区二区| 国产伦精品一区二区三区高清版| 在线精品亚洲| 亚洲女女女同性video| 老色鬼精品视频在线观看播放| 最近中文字幕mv在线一区二区三区四区| 一区二区三区日韩欧美精品| 久久久久久久性| 国产精品免费小视频| 在线免费高清一区二区三区| 亚洲欧美日韩精品久久奇米色影视| 男人的天堂亚洲| 亚洲一区尤物| 欧美激情国产日韩精品一区18| 国产一区二区三区久久| 亚洲视频在线观看视频| 欧美国产亚洲精品久久久8v| 亚洲一区影音先锋| 欧美日本中文字幕| 在线观看一区| 欧美在线一区二区| 亚洲精选91| 久久婷婷久久| 国产人妖伪娘一区91| 亚洲作爱视频| 亚洲成色精品| 久久九九久精品国产免费直播| 欧美性大战久久久久久久蜜臀| 亚洲人成人一区二区三区| 久久久久久亚洲精品杨幂换脸 | 国产乱肥老妇国产一区二| av成人免费在线观看| 欧美黄色精品| 欧美专区日韩专区| 国产日韩亚洲欧美精品| 亚洲午夜日本在线观看| 亚洲电影av| 久久综合久色欧美综合狠狠| 国内成人在线| 久久激情视频免费观看| 亚洲欧美日韩国产综合精品二区| 欧美日韩一区二区在线观看| 一本到12不卡视频在线dvd| 欧美成人官网二区| 久久免费的精品国产v∧| 国产日产欧美一区| 欧美亚洲综合网| 亚洲综合色激情五月| 国产精品久久久久久妇女6080| 亚洲精品一二三| 亚洲高清电影| 欧美高清在线一区| 亚洲精品影视在线观看| 欧美国产在线视频| 欧美大片免费观看在线观看网站推荐| 在线电影一区| 女同性一区二区三区人了人一| 久久xxxx| 一区在线视频观看| 蜜桃av一区二区三区| 久久综合伊人77777| 91久久久亚洲精品| 欧美激情精品久久久久| 免费中文日韩| 日韩一级在线| 99视频精品全国免费| 国产精品高潮呻吟久久av无限| 亚洲欧美日韩在线播放| 亚洲主播在线| 国产手机视频一区二区| 久久天天躁狠狠躁夜夜爽蜜月| 久久嫩草精品久久久精品| 亚洲高清视频一区| 91久久夜色精品国产网站| 欧美日韩一区在线观看| 午夜视频在线观看一区二区| 午夜性色一区二区三区免费视频| 国产日韩欧美中文在线播放| 久久综合影音| 欧美激情久久久| 亚洲一区二区视频在线| 亚洲综合久久久久| 依依成人综合视频| 亚洲国产乱码最新视频| 欧美日韩精品国产| 亚洲欧美文学| 久久成人精品| 日韩视频精品在线观看| 在线午夜精品自拍| 国语自产精品视频在线看抢先版结局 | 亚洲国产精品国自产拍av秋霞| 欧美日韩和欧美的一区二区| 亚洲欧美久久| 久久久久青草大香线综合精品| 亚洲精品一级| 亚洲自拍16p| 亚洲第一成人在线| 亚洲精选视频在线| 国产精品综合| 亚洲国产精彩中文乱码av在线播放| 欧美日韩国产在线播放| 欧美在线三区| 免费一级欧美在线大片| 亚洲免费在线| 久久一区二区三区四区| 亚洲一区中文| 久久久亚洲影院你懂的| 亚洲一二三四区| 久久久精彩视频| 在线亚洲欧美视频| 久久爱91午夜羞羞| 中日韩高清电影网| 久久久久欧美精品| 亚洲亚洲精品在线观看 | 欧美高清视频在线| 国产精品美女主播| 欧美福利影院| 国产精品视频久久| 亚洲激情网址| 国产在线精品自拍| 日韩亚洲欧美一区| 亚洲国产精品一区二区www| 亚洲天堂av综合网| 亚洲伦理在线免费看| 欧美一区二区视频在线观看| 在线视频你懂得一区| 久久久蜜桃精品| 欧美在线免费观看视频| 欧美精品综合| 欧美成人免费小视频| 国产婷婷色一区二区三区| 亚洲精品乱码久久久久久| 在线成人av.com| 午夜精品福利视频| 亚洲亚洲精品在线观看| 欧美高清影院| 浪潮色综合久久天堂| 国产精品五月天| 日韩午夜一区| 亚洲精品欧美日韩专区| 久久久久久有精品国产| 久久成人18免费网站| 欧美天天在线| 亚洲精品久久久久久久久久久| 尤物yw午夜国产精品视频| 亚洲欧美日韩中文播放| 亚洲欧美三级在线| 欧美视频中文字幕在线| 亚洲日本电影在线| 亚洲人成艺术| 免费在线观看精品| 久久综合色一综合色88| 国产私拍一区| 性欧美暴力猛交69hd| 午夜精品久久久久久久久久久| 欧美日韩精品一区| 亚洲欧洲视频| 亚洲另类春色国产| 欧美电影资源| 亚洲国产免费看| 91久久久久久久久| 欧美jizzhd精品欧美巨大免费| 欧美大尺度在线| 在线日韩av片| 久久亚洲一区二区| 欧美国产日本韩| 亚洲国产天堂久久综合网| 美女爽到呻吟久久久久| 欧美电影免费观看高清| 亚洲欧洲精品一区| 欧美1区视频| 亚洲高清在线观看| 亚洲区免费影片| 欧美国产视频日韩| 亚洲欧洲午夜| 一区二区三区精密机械公司 | 欧美亚洲免费高清在线观看| 国产精品丝袜久久久久久app| 亚洲神马久久| 久久xxxx| 狠狠色丁香久久综合频道| 久久久久久91香蕉国产| 欧美国产先锋| 在线视频精品一| 国产精品久久久久国产a级| 亚洲欧美另类在线观看| 久久久久综合| 亚洲国产一区二区a毛片| 欧美另类99xxxxx| 这里只有精品丝袜| 久久久久久久久蜜桃| 亚洲国产成人91精品| 欧美国产国产综合| 亚洲网站在线看|