亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? countingdlg.cpp

?? 一個完整的源代碼統計器
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
		}
		if(listPaths.IsEmpty())
			break;

		strFolder = listPaths.RemoveHead();
		strPath = strFolder + "\\*.*";
		finder.Close();
	}while(pThis->m_CountingStatus==COUNTING);

	if(pThis->m_nTimer!=NULL)
	{
		pThis->KillTimer(pThis->m_nTimer);
		pThis->m_nTimer = NULL;
	}

	CString str1;
	if(pThis->m_CountingStatus==STOP)
		str1.LoadString(IDS_ABORT); //用戶強行終止
	else
		str1.LoadString(IDS_COUNTINGSTOP);
	pThis->GetDlgItem(IDC_PATH_COUNTING)->SetWindowText(str1);

	pThis->m_CountingStatus = STOP;

	pThis->m_btnCount.SetIcon(IDI_COUNT);
	CString str;
	str.LoadString(IDS_COUNT);
	pThis->m_btnCount.SetWindowText(str);

	HICON hIcon = (HICON)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_BIG_ICON1),
		IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);//SM_CXICON 
	pThis->m_ctrlCountingIcon.SendMessage(STM_SETICON, (WPARAM)hIcon, 0);

	return 0;
}

////////////////////////////////////////////////////////////
//modify a path with file name to without file name
// such as: 
//   modify:  d:\\temp\\countingdlg.cpp
//        to:   d:\\temp
//
////////////////////////////////////////////////////////////
CString CCountingDlg::GetPurePath(CString strPath)
{
	int nLast = strPath.ReverseFind('\\');
	return strPath.Left(nLast);
}

/******************************************************************
*  往一字符串strText中追加空格,使其長度達到num
*  bAtEnd : TRUE表示在字符串后面追加空格
*			  FALSE表示在字符串前面追加空格
*    若strText的長度本來就大于num,則將最后三個字符改為...
*******************************************************************/
CString CCountingDlg::TextAppendSpace(CString strText, int num, BOOL bAtEnd)
{
	CString str;
	if(strText.GetLength()>=num)
	{
		str = strText.Left(num-3);
		str += "...";
	}
	else
	{
		str = strText;
		for(int i=strText.GetLength(); i<num; i++)
		{
			if(bAtEnd)
				str +=" ";
			else
				str = " "+str;
		}
	}

	return str;
}
/*****************************************************************
	strFileName是否為我們要統計的文件類型
*****************************************************************/
BOOL CCountingDlg::IsSearchingFor(CString strFileName)
{
	CString strExts = m_strComboExt;
	strExts.MakeLower();
	strFileName.MakeLower();

	CString strOneOfExts; // get one extension in strExts
	while(ExtractExtension(strOneOfExts, strExts))
	{
		if(CompareMarkString(strOneOfExts, strFileName))
			return TRUE;
	}

	return FALSE;
}

/*****************************************************************
	比較strFile是否為inputFile的文件類型
*****************************************************************/
BOOL CCountingDlg::CompareMarkString(CString inputFile, CString strFile)
{
	strFile = strFile.Right(strFile.GetLength()-strFile.ReverseFind('\\')-1);
	int nLength1 = strFile.GetLength(); 
	int nLength2 = inputFile.GetLength();

	for(int i=0, j=0; i<nLength1&&j<nLength2; i++, j++)
	{
		if(inputFile[j]=='*')
		{
			j++;
			if(j==nLength2)
				return TRUE;
			while(j<nLength2&&inputFile[j]=='?')
			{
				i++;
				j++;
			}
			if(j>=nLength2)
				return TRUE;

			while(i<nLength1&&inputFile[j]!=strFile[i])
				i++;
			if(i>=nLength1)
				return FALSE;

			continue;
		}
		if(inputFile[j]=='?')
		{
			continue;
		}
		if(inputFile[j]==strFile[i])
		{
			continue;
		}
		else
			return FALSE;
	}

	if(i==nLength1&&j==nLength2)
		return TRUE;
	else
		return FALSE;
}

/*****************************************************************
	統計開始后動態顯示圖標,表示統計進行中
*****************************************************************/

void CCountingDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if(nIDEvent != (UINT)m_nTimer)
		return;

	static int icons[] =
	{ IDI_BIG_ICON1, IDI_BIG_ICON2, IDI_BIG_ICON3, IDI_BIG_ICON4, IDI_BIG_ICON5, IDI_BIG_ICON6, 
	IDI_BIG_ICON7};
	
	static long index = 0;

	HICON hIcon = (HICON)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(icons[index++%7]),
		IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);//SM_CXICON 
	m_ctrlCountingIcon.SendMessage(STM_SETICON, (WPARAM)hIcon, 0);
}


/*****************************************************************
	確定是否退出
*****************************************************************/
void CCountingDlg::OnQuit() 
{
	// TODO: Add your control notification handler code here
	CString str1, str2;
	str1.LoadString(IDS_TOQUIT);
	str2.LoadString(IDS_MESSAGE);
	if(MessageBox(str1, str2, MB_YESNO)==IDNO)
	{
		return ;
	}
	CDialog::OnCancel();
}

/*********************************************************
	統計c++文件
*********************************************************/
int CCountingDlg::GetCppFileLines(LPCTSTR strFileName, int* pnLength, int* pnCommentLines, int* pnBlankLines)
{
	//there are two methods to count lines in files, by CStdioFile or CFile
	*pnLength = 0;
	*pnCommentLines = 0;
	*pnBlankLines = 0;

	CStdioFile file;
	if(file.Open(strFileName, CFile::modeRead)==FALSE)
		return 0;

	int nLines = 0;
	int nCommentLines = 0;
	int nBlankLines = 0;

	BOOL bCommentSet = FALSE; //注釋行統計標識 有"/*"時TRUE, "*/"時FALSE

	int nLength = file.GetLength();
	*pnLength = nLength;

	CString bufRead;

	int nLineCommentBegin = 0;
	while(file.ReadString(bufRead)!=FALSE)
	{
		nLines++;

		bufRead.TrimLeft(); //先將文件頭的空格或制表符去掉

		if(bufRead.GetLength()==0) //為空白行
		{
			nBlankLines++;
			continue;
		}

		if(bufRead.Find("//")==0 && !bCommentSet)
		{
			nCommentLines++;
			continue;
		}

		int nStartComment = bufRead.Find("/*");
		if(nStartComment == 0  && !bCommentSet ) // "/*" is the first two chars
		{
			bCommentSet = TRUE;
//			nLineCommentBegin = nLines;
		}
		else if(nStartComment != -1 &&!bCommentSet) // "/*" is not the first two chars though found. so it's a code line
		{
			bCommentSet = TRUE;
			nLineCommentBegin = nLines;
			nCommentLines --;
			if(bufRead.Find("\"")!=-1) //防止/*在兩個"之間,如 "...../*.....",這種/*不是注釋符
			{
				CString strTemp = bufRead.Left(nStartComment);
				int nCountQuota=0;
				int i=1;
				if(strTemp[0]=='\"')nCountQuota++;
				while((strTemp[i]=='\"'&&strTemp[i-1]!='\\')&&i<strTemp.GetLength() )
				{
					nCountQuota++;
					i++;
				}
				if((nCountQuota/2)*2 != nCountQuota)//nCountQuota為奇數,還原bCoommentSet
				{
					bCommentSet = FALSE;
					nCommentLines ++;
				}
			}
		}

		bufRead.TrimRight();

		int nEndComment = bufRead.Find("*/");
		if(bufRead.GetLength()>=2 && (nEndComment == (bufRead.GetLength()-2)) && bCommentSet)
		{
			bCommentSet = FALSE;
			nCommentLines ++;  
		}
		else if(nEndComment != -1 && bCommentSet)
		{
			bCommentSet = FALSE;
			if(nLineCommentBegin == nLines) // /* */ on the same line
				nCommentLines++;
			bufRead = bufRead.Right(bufRead.GetLength()-nEndComment-2);
			if(bufRead.Find("//")!=-1) //it is very strange!  such as  "code */ (code or blank) // code"
			{
				bufRead.TrimLeft();
				if(bufRead.Find("//")==0)
					nCommentLines++;
			}
			else if(nLineCommentBegin != nLines && bufRead.GetLength()==0)
				nCommentLines++;
		}

		if(bCommentSet)
			nCommentLines++;
	}

	*pnCommentLines = nCommentLines;
	*pnBlankLines = nBlankLines;

	file.Close();

	return nLines;

	//the following is not so good. sometimes it may obtain a wrong result

/*	CFile file;

	file.Open(strFileName, CFile::modeRead);

	int nLines = 0;
	int nCodeLines = 0;
	int nCommentLines = 0;
	int nBlankLines = 0;

	BOOL bLastSplash = FALSE;
	BOOL bDoubleSplash = FALSE;
	BOOL bLastStar = FALSE;
	BOOL bCommentCount = FALSE;
	BOOL bBlankCount = TRUE;

	int nLength = file.GetLength();
	m_nSize += nLength;
	*pnLength = nLength;

	char buf[255];
	int nRead = 0;
	while(nLength>0)
	{
		nRead = file.Read(buf, 250);
		
		if(buf[0] == '*' && bLastSplash)
		{
			bLastSplash = FALSE;
			bCommentCount = TRUE;
		}

		if(buf[0] == '/' && bLastSplash && !bCommentCount && bBlankCount && !bDoubleSplash)
		{
			bLastSplash = FALSE;
			bDoubleSplash = TRUE;
		}

		if(buf[0] == '/' && bLastStar)
		{
			bLastStar = FALSE;
			bCommentCount = FALSE;
			nCommentLines++;
		}

		for(int i=0; i<nRead; i++)
		{
			if(buf[i] == '/')
			{
				if(i<nRead-1 && buf[i+1]=='*' && !bDoubleSplash )
					bCommentCount = TRUE;
				if(i<nRead-1 && buf[i+1]=='/' && !bCommentCount && bBlankCount  && !bDoubleSplash)
					bDoubleSplash = TRUE;
				if(i==nRead-1)
					bLastSplash=TRUE;
			}


			if(buf[i] == '*')
			{
				if(i<nRead-1 && buf[i+1]=='/')
				{
					bCommentCount = FALSE;
					nCommentLines++;
				}
				if(i==nRead-1)
					bLastStar=TRUE;
			}
			
			if( buf[i]!=' ' && buf[i]!='\t' && buf[i]!='\r' && buf[i]!='\n')//&& bBlankCount)
				bBlankCount = FALSE;

			if(buf[i]=='\n')
			{
				nLines++;
				if(bBlankCount)nBlankLines++;
				if(bBlankCount && bCommentCount)nCommentLines--;
				if(bDoubleSplash)
				{
					nCommentLines++;
					bDoubleSplash = FALSE;
				}

				bBlankCount = TRUE;
				
				if(bCommentCount) nCommentLines++;
			}
		}
		nLength -= nRead;
	}

	if(buf[nRead-1]!='\n')
		nLines++;
	if(bDoubleSplash)
		nCommentLines++;

	*pnCommentLines = nCommentLines;
	*pnBlankLines = nBlankLines;

	file.Close();

	return nLines;
*/
}

/*****************************************************************
	統計SQL文件的行數

*****************************************************************/

int CCountingDlg::GetSqlFileLines(LPCTSTR strFileName, int *pnLength, int *pnCommentLines, int *pnBlankLines)
{
	*pnLength = 0;
	*pnCommentLines = 0;
	*pnBlankLines = 0;

	CStdioFile file;
	if(file.Open(strFileName, CFile::modeRead)==FALSE)
		return 0;

	int nLines = 0;
	int nCommentLines = 0;
	int nBlankLines = 0;

	BOOL bCommentSet = FALSE;

	int nLength = file.GetLength();
	m_nSize += nLength;
	*pnLength = nLength;

	CString bufRead;

	while(file.ReadString(bufRead)!=FALSE)
	{
		nLines++;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色视频欧美一区二区三区| 九九热在线视频观看这里只有精品| 日韩一区二区在线播放| 91美女视频网站| 成人美女视频在线看| 国产成人精品影视| 国产91综合网| www.欧美亚洲| 99精品视频在线观看免费| 99re视频这里只有精品| eeuss鲁一区二区三区| 99re视频精品| 欧美精三区欧美精三区| 69久久99精品久久久久婷婷| 欧美喷潮久久久xxxxx| 日韩一区二区免费在线观看| 日韩欧美国产系列| 久久久蜜桃精品| 亚洲男人天堂av网| 亚洲国产日韩a在线播放| 亚洲综合精品久久| 久久成人免费网| 国产成人鲁色资源国产91色综| av电影一区二区| 欧美三片在线视频观看| 欧美精品一区二区三区蜜臀| 日本一区免费视频| 亚洲国产va精品久久久不卡综合| 日韩电影在线一区二区| 国产一区二区三区久久久| 成人avav影音| 在线综合视频播放| 久久久www成人免费无遮挡大片| 久久嫩草精品久久久精品一| 精品卡一卡二卡三卡四在线| 国产婷婷色一区二区三区在线| 久久久久久久久久电影| 国产精品久久精品日日| 久久久久国产精品厨房| 亚洲天堂2014| 亚洲福利视频一区| 蜜臀精品一区二区三区在线观看| 麻豆高清免费国产一区| 福利视频网站一区二区三区| 色菇凉天天综合网| 欧美一卡2卡三卡4卡5免费| 久久美女艺术照精彩视频福利播放| 国产欧美一二三区| 一片黄亚洲嫩模| 另类小说色综合网站| 色综合天天综合网天天看片| 欧美日韩在线播放一区| 久久久蜜臀国产一区二区| 国产日韩视频一区二区三区| 亚洲二区在线观看| 国产高清亚洲一区| 欧美色视频在线观看| 国产午夜精品久久久久久免费视| 亚洲四区在线观看| 久久99久国产精品黄毛片色诱| 成人免费精品视频| 欧美电影免费观看高清完整版在| 国产调教视频一区| 亚洲不卡在线观看| 成人免费不卡视频| 精品美女一区二区| 亚洲第一狼人社区| 97精品国产露脸对白| 欧洲中文字幕精品| 国产日韩v精品一区二区| 免费黄网站欧美| 在线亚洲欧美专区二区| 国产午夜亚洲精品理论片色戒| 性欧美大战久久久久久久久| 成人开心网精品视频| 欧美一区二区三区精品| 亚洲一区二区三区四区中文字幕| 国产精品综合av一区二区国产馆| 欧美日韩精品是欧美日韩精品| 国产精品丝袜久久久久久app| 另类小说欧美激情| 欧美大片在线观看一区| 日韩电影免费一区| 精品视频一区 二区 三区| 自拍偷自拍亚洲精品播放| 国产999精品久久久久久绿帽| 日韩欧美视频一区| 极品美女销魂一区二区三区| 91精品国产综合久久久蜜臀图片| 亚洲综合一二区| 91色乱码一区二区三区| 中文字幕一区二区三区在线不卡 | 日本va欧美va精品| 欧美在线一区二区| 一区精品在线播放| 精品一区二区三区在线播放视频| 欧美精品xxxxbbbb| 五月婷婷激情综合| 欧美日本在线看| 日韩激情一二三区| 日韩免费电影一区| 国产一区二区三区观看| 久久综合丝袜日本网| 国产一区二区看久久| 日本一区二区三区免费乱视频| 国产69精品久久777的优势| 欧美激情综合五月色丁香小说| 国产精品影视在线观看| 国产欧美视频一区二区| 国产91综合一区在线观看| 亚洲免费av在线| 欧美日韩综合在线免费观看| 日日摸夜夜添夜夜添亚洲女人| 欧美一区二区三区在线| 久久国产精品一区二区| 国产午夜亚洲精品午夜鲁丝片| caoporm超碰国产精品| 中文字幕在线不卡国产视频| 色综合天天综合网天天狠天天| 亚洲欧美激情视频在线观看一区二区三区| 91在线视频免费观看| 亚洲超碰97人人做人人爱| 日韩欧美你懂的| 成人午夜私人影院| 亚洲福利视频三区| 欧美精品一区二区久久婷婷| 成人av资源站| 日韩1区2区3区| 国产日韩欧美一区二区三区乱码| 色综合天天天天做夜夜夜夜做| 亚洲国产精品一区二区久久| 日韩久久久精品| 91在线视频观看| 婷婷六月综合亚洲| 亚洲图片欧美一区| 久久精品一二三| 欧美狂野另类xxxxoooo| 成人综合在线视频| 午夜av一区二区三区| 欧美国产一区在线| 欧美疯狂做受xxxx富婆| 丁香五精品蜜臀久久久久99网站| 五月天亚洲婷婷| 亚洲欧美怡红院| 日韩精品影音先锋| 欧美色精品天天在线观看视频| 国产成人av一区二区三区在线| 亚洲国产一区二区a毛片| 国产欧美一区二区三区鸳鸯浴 | 久久国产日韩欧美精品| 一区二区三区免费| 中文字幕欧美三区| 日韩欧美电影一区| 欧美久久一二区| 国产成人在线视频网址| 韩国精品主播一区二区在线观看 | 成人黄色小视频| 精东粉嫩av免费一区二区三区| 午夜伊人狠狠久久| 亚洲人成网站影音先锋播放| 国产拍欧美日韩视频二区| 欧美成人一区二区三区| 欧美一区二区三区在线电影| 欧美伦理影视网| 欧美日韩在线免费视频| 色综合欧美在线视频区| 成人污污视频在线观看| 国产福利一区二区三区视频在线 | 国产精品久久三区| 中文字幕精品一区二区精品绿巨人 | 亚洲成人黄色影院| 亚洲一区二区美女| 亚洲图片欧美视频| 亚洲福中文字幕伊人影院| 一区二区三区影院| 有坂深雪av一区二区精品| 亚洲视频一区在线| 亚洲视频资源在线| 亚洲一区二区高清| 天堂午夜影视日韩欧美一区二区| 国产亚洲美州欧州综合国| 欧美无乱码久久久免费午夜一区 | 国产午夜亚洲精品不卡| 日韩精品一区在线观看| 日韩免费在线观看| 久久精品夜色噜噜亚洲a∨| 中文字幕精品一区| 尤物av一区二区| 美女网站视频久久| 国产麻豆视频一区二区| 北条麻妃国产九九精品视频| 日本韩国欧美在线| 777xxx欧美| 国产三级一区二区| 国产欧美精品一区二区色综合 | 成人av午夜电影| 欧美日韩综合在线免费观看| 日韩一级黄色大片| 欧美成人a在线| 中文字幕欧美日韩一区|