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

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

?? countingdlg.cpp

?? 一個完整的源代碼統計器
?? CPP
?? 第 1 頁 / 共 4 頁
字號:

void CCountingDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CCountingDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

/***********************************************************
* 當按下ESC鍵時,確認是否退出
***********************************************************/
void CCountingDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	CString str1, str2;
	str1.LoadString(IDS_TOQUIT);
	str2.LoadString(IDS_MESSAGE);
	if(MessageBox(str1, str2, MB_YESNO)==IDNO)
	{
		return ;
	}
	CDialog::OnCancel();
}

/***********************************************************
* 將統計保存為文本文件和csv文件
***********************************************************/
void CCountingDlg::OnSave() 
{
	// TODO: Add your control notification handler code here
	if(0==m_ctlResult.GetItemCount())
	{
		CString str1, str2;
		str1.LoadString(IDS_UNSTARTED);
		str2.LoadString(IDS_MESSAGE);
		MessageBox(str1, str2);
		return;
	}

	if(m_CountingStatus == COUNTING)
	{
		CString str1, str2;
		str1.LoadString(IDS_WAITING);
		str2.LoadString(IDS_MESSAGE);
		MessageBox(str1, str2);
		return;
	}

	CString str3;
	str3.LoadString(IDS_SAVETYPE);
	CFileDialog dlgFile(
		FALSE, _T("*.txt"), NULL,
		OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		((LPCTSTR)str3));
	if (dlgFile.DoModal() == IDCANCEL)
		return ;

	CString sPath = dlgFile.GetPathName();
	CString sExt = dlgFile.GetFileExt();
	sExt.MakeLower();

	if(sExt == "txt")
		SaveAsTextFile((LPCTSTR)sPath);
	else if(sExt == "csv")
		SaveAsCSVFile((LPCTSTR)sPath);
	else
	{
		CString str1, str2;
		str1.LoadString(IDS_WRONGTYPE);
		str2.LoadString(IDS_MESSAGE);
		MessageBox(str1, str2);
	}

	CString str1, str2;
	str1.LoadString(IDS_SAVEOVER);
	str2.Format("%s:%s", str1, sPath);
	GetDlgItem(IDC_PATH_COUNTING)->SetWindowText(str2);
}

/*******************************************************
點擊“統計”按鈕,開始統計
********************************************************/
void CCountingDlg::OnCount() 
{
	// TODO: Add your control notification handler code here
	if(m_CountingStatus == COUNTING)
	{
		m_CountingStatus = STOP;
		return;
	}
	UpdateData(TRUE);

	if(m_strComboExt.Find(_T("**")) != -1||m_strComboFolder.Find(_T("**")) != -1)
	{
		CString str1, str2;
		str1.LoadString(IDS_INVALIDFILE);
		str2.LoadString(IDS_MESSAGE);
		MessageBox(str1, str2);
		return;
	}

	if(m_strComboExt.IsEmpty())
	{
		CString str1, str2;
		str1.LoadString(IDS_INPUT_FILE);
		str2.LoadString(IDS_MESSAGE);
		MessageBox(str1, str2);
		return;
	}

	if(m_strComboFolder.IsEmpty())
	{
		CString str1, str2;
		str1.LoadString(IDS_COUNTING_PATH);
		str2.LoadString(IDS_MESSAGE);
		MessageBox(str1, str2);
		return;
	}

	if(m_ctlFolder.FindStringExact(-1, m_strComboFolder)==CB_ERR)
	{
		m_ctlFolder.AddToMRU((LPCTSTR)m_strComboFolder);
	}

	m_btnCount.SetIcon(IDI_COUNTSTOP);
	CString str;
	str.LoadString(IDS_STOP);
	m_btnCount.SetWindowText(str);
	
	m_imageList.DeleteImageList();
	m_imageList.Create(16, 16, ILC_MASK|ILC_COLORDDB, 1, 100);
	m_ctlResult.SetImageList(&m_imageList, LVSIL_SMALL);

	m_ctlResult.DeleteAllItems();
	m_nItemCountSet = 1000;
	m_ctlResult.SetItemCount(m_nItemCountSet);

	char strCurrentDirectory[_MAX_PATH];
	GetCurrentDirectory(_MAX_PATH, strCurrentDirectory);
	m_strCurrentDir = strCurrentDirectory; //保存當前路徑以便線程結束后恢復

	SetCurrentDirectory(m_strComboFolder);//set directory to count

	m_nTotalLines = 0;//initialize
	m_nCodeLines = 0;
	m_nCommentLines = 0;
	m_nBlankLines = 0;
	m_nFiles = 0;
	m_nSize = 0;

	m_nTimer = SetTimer(COUNTING_TIMER, 200, NULL);
	m_CountingStatus = COUNTING;

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

	char buf[_MAX_PATH];
	GetCurrentDirectory(_MAX_PATH, buf);
	//開始線程
	CWinThread* pThread = AfxBeginThread(CountThread, this);
}

/*******************************************************************
* Extract one extension from strExtension, and assign it to strOneOfExt
* for example: strExtension = "*.cpp;*.c;*.h"
*	then,	1st time: strOneOfExt = "*.cpp", 
*			2nd time: strOneOfExt = "*.c",
*			3rd time: strOneOfExt = "*.h",
*	return: TRUE: extracted successfully
*			FALSE: strExtension is empty. 
*********************************************************************/
BOOL CCountingDlg::ExtractExtension(CString & strOneOfExt, CString & strExtension)
{
	strExtension.TrimLeft();

	if(strExtension.IsEmpty())
		return FALSE;

	int nLength = strExtension.GetLength();

	int nFirst = strExtension.FindOneOf(";,:");
	if(nFirst == -1) //there may be only one extension in strExtsion
		nFirst = nLength;
	strOneOfExt = strExtension.Left(nFirst);

	if(nFirst == nLength)
		strExtension.Empty();
	else
		strExtension = strExtension.Right(nLength-1-nFirst);//rest

	strOneOfExt.TrimLeft();//trim whitespace
	strOneOfExt.TrimRight();

	return TRUE;
}

/*******************************************************************
* find file type according to its extension
* for example: strExtension = "xiaogi.c"
*	return: TYPE_C
*********************************************************************/
int CCountingDlg::FindFileType(CString strFile)
{
	int nLast = strFile.ReverseFind('.');
	CString extNoDot = strFile.Right(strFile.GetLength()-nLast-1);

	for(int i=0; i<m_structExtention.arrayType.GetSize(); i++)
	{
		if(extNoDot.CompareNoCase(m_structExtention.arrayType[i])==0)
			return m_structExtention.nType[i];
	}

	return -1;
}

/*********************************************************
	選擇需統計的文件夾
*********************************************************/
void CCountingDlg::OnBrowseFolder() 
{
	// TODO: Add your control notification handler code here
	CFolderDialog dlg("", BIF_RETURNONLYFSDIRS, this);
	if(dlg.DoModal()==IDOK)
	{
		CString strPath = dlg.GetPathName();
		m_ctlFolder.SetWindowText((LPCTSTR)strPath);
	}
}

/*********************************************************
	選擇需統計的文件
*********************************************************/
void CCountingDlg::OnBrowseExt() 
{
	// TODO: Add your control notification handler code here
	CFileDialog dlgFile(TRUE, "", NULL, 
		OFN_ALLOWMULTISELECT|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,
		NULL, this);

	dlgFile.m_ofn.lStructSize = sizeof(OPENFILENAME);
//	dlgFile.m_ofn.hwndOwner = GetSafeHwnd();
	static char BASED_CODE szFilter[]
		= "C++ Files (.c;.cpp;.cxx;.tli;.h;.tlh;.rc)\0*.c;*.cpp;*.h;*.rc\0\
Web Files(.htm;.html;.htx;.asp;.alx;.stm;.shtml)\0*.htm;*.html\0\
C++ Source Files(.c;.cpp;.cxx;.tli)\0*.c; *.cpp\0\
C++ Include Files(.h;.hpp;.hxx;.inl;.tlh)\0*.h\0\
Resource Files(.rc;.rct;.res)\0*.rc\0\
Java Source Files(.java)\0*.java\0\
ASP Source Files(.asp)\0*.asp\0\
JSP Source Files(.jsp)\0*.jsp\0\
PL*sql Files(.sql)\0*.sql\0\
VB Source Files(.frm;.bas;.ctl;.cls)\0*.frm;*.bas;*.ctl;*.cls\0\
Text File(.txt)\0*.txt\0\
All Files (*.*)\0*.*\0\0";

	dlgFile.m_ofn.lpstrFilter = szFilter;
	char FileName[640];
	memset(FileName, 0, sizeof(FileName));
	dlgFile.m_ofn.lpstrFile = FileName;
	dlgFile.m_ofn.nMaxFile = 640;

	CString strFiles = "";
	CString strPath = "";
	if(dlgFile.DoModal()==IDOK)
	{
		CString sFile = dlgFile.GetFileName();
		CString sPath = dlgFile.GetPathName();
		if(sFile.IsEmpty())
		{
			strPath = sPath;
		}
		else
		{
	 		strPath = GetPurePath(sPath);
		}

		POSITION pos = dlgFile.GetStartPosition();
		while(pos!=NULL)
		{
			CString strPathName = dlgFile.GetNextPathName(pos);
			int nFind = strPathName.ReverseFind('\\');
			strFiles += strPathName.Right(strPathName.GetLength()-nFind-1);
			strFiles += ";";
		}
		strFiles = strFiles.Left(strFiles.GetLength()-1);
		m_ctlExtension.SetWindowText((LPCTSTR)strFiles);
		m_ctlFolder.SetWindowText((LPCTSTR)strPath);
	}
}

/*********************************************************
	統計主線程
*********************************************************/
UINT CCountingDlg::CountThread(LPVOID lpvData)
{
	CCountingDlg* pThis = (CCountingDlg*)lpvData;
	CStringList listPaths;
	CString  strPath;
	CString  strFolder;

	CFileFind finder;
	BOOL bWorking;

	if(pThis->m_strComboFolder[pThis->m_strComboFolder.GetLength()-1]=='\\')
		strPath = pThis->m_strComboFolder + "*.*";
	else
		strPath = pThis->m_strComboFolder + "\\*.*";

	do{
		bWorking = finder.FindFile(strPath);
		while(bWorking  && pThis->m_CountingStatus==COUNTING)
		{
			bWorking = finder.FindNextFile();
			CString strFilePath = finder.GetFilePath();
			if(finder.IsDots())
				continue;

			CString str1, str2;
			str1.LoadString(IDS_COUNTINGFILE);
			str2.Format("%s:%s", str1, strFilePath);
			pThis->GetDlgItem(IDC_PATH_COUNTING)->SetWindowText(str2);

			if(finder.IsDirectory())
			{
				if(pThis->m_bIncludeSubfolder)
					listPaths.AddHead(strFilePath);
				continue;
			}
			else
			{
				if(pThis->IsSearchingFor(strFilePath))
				{
					int nType;
					nType = pThis->FindFileType(strFilePath);
					if(nType == -1)
						nType = TYPE_OTH;

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

					switch(nType)
					{
					case TYPE_C:
					case TYPE_CPP:
					case TYPE_H:
					case TYPE_JSP:
					case TYPE_JAVA:
						nLines = pThis->GetCppFileLines((LPCTSTR)strFilePath, &nLength, &nCommentLines, &nBlankLines);
						break;
					case TYPE_VB:
					case TYPE_ASP:
						nLines = pThis->GetVBFileLines((LPCTSTR)strFilePath, &nLength, &nCommentLines, &nBlankLines);
						break;
					case TYPE_SQL:
						nLines = pThis->GetSqlFileLines((LPCTSTR)strFilePath, &nLength, &nCommentLines, &nBlankLines);
						break;
					default:
						nLines = pThis->GetTxtFileLines((LPCTSTR)strFilePath, &nLength, &nCommentLines, &nBlankLines);
						break;
					}

					nCodeLines = nLines - nCommentLines - nBlankLines;

					int pos=strFilePath.ReverseFind('\\');

					if(pThis->m_nFiles > pThis->m_nItemCountSet)
						pThis->m_nItemCountSet += 1000;
					pThis->m_ctlResult.SetItemCount(pThis->m_nItemCountSet);

					SHFILEINFO sfi;
					if (::SHGetFileInfo (strFilePath, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO),SHGFI_USEFILEATTRIBUTES | SHGFI_DISPLAYNAME | SHGFI_TYPENAME |SHGFI_ICON|SHGFI_SMALLICON ))
					{	
						CString str;
						pThis->m_imageList.Add(sfi.hIcon);
						pThis->m_ctlResult.InsertItem(pThis->m_nFiles,sfi.szDisplayName,pThis->m_nFiles);

     					pThis->m_ctlResult.SetItemText(pThis->m_nFiles, 1, strFilePath.Mid(0,pos));
						str.Format("%d", nLines);
    					pThis->m_ctlResult.SetItemText(pThis->m_nFiles, 2, str);
						str.Format("%d", nCodeLines);
    					pThis->m_ctlResult.SetItemText(pThis->m_nFiles, 3, str);
						str.Format("%d", nCommentLines);
    					pThis->m_ctlResult.SetItemText(pThis->m_nFiles, 4, str);
						str.Format("%d", nBlankLines);
    					pThis->m_ctlResult.SetItemText(pThis->m_nFiles, 5, str);
						pThis->m_ctlResult.SetItemText(pThis->m_nFiles, 6, sfi.szTypeName);
					}

					pThis->m_ctlResult.Update(pThis->m_nFiles);

					pThis->m_nFiles++;
					pThis->m_nSize += nLength;
					pThis->m_nTotalLines += nLines;
					pThis->m_nCodeLines += nCodeLines;
					pThis->m_nCommentLines += nCommentLines;
					pThis->m_nBlankLines += nBlankLines;

					pThis->UpdateResult();
				}
			}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区免费观看视频| 成人精品免费网站| 岛国一区二区三区| 欧美精品久久一区二区三区| 中文字幕一区二区三区在线播放 | 91精品国产综合久久国产大片 | 国产福利91精品| 欧美撒尿777hd撒尿| 国产精品丝袜一区| 精品一区中文字幕| 欧美一区二视频| 亚洲国产一区二区三区青草影视| 国产ts人妖一区二区| 欧美精品一区二区三区视频| 亚洲成人自拍偷拍| 欧美午夜精品一区| 一区二区欧美精品| 一本色道久久综合精品竹菊| 亚洲国产高清aⅴ视频| 捆绑紧缚一区二区三区视频 | 久久网站热最新地址| 三级精品在线观看| 欧美三级蜜桃2在线观看| 成人免费在线播放视频| 成人黄页毛片网站| 国产精品网站在线播放| 粉嫩欧美一区二区三区高清影视 | 亚洲成人免费在线| 欧美三级韩国三级日本一级| 亚洲午夜一二三区视频| 欧美在线观看视频一区二区三区| 国产精品欧美精品| 成人国产免费视频| 中文字幕人成不卡一区| 91色在线porny| 亚洲猫色日本管| 在线影院国内精品| 一区二区三区免费在线观看| 91成人看片片| 日本欧美大码aⅴ在线播放| 91精品视频网| 国内精品嫩模私拍在线| 2023国产精品自拍| 波多野结衣亚洲一区| 亚洲日本va午夜在线影院| 在线免费观看一区| 日韩精品91亚洲二区在线观看| 日韩亚洲欧美综合| 国产一区二区女| 国产精品久久三区| 欧美午夜精品久久久久久孕妇| 天天综合色天天综合色h| 日韩精品最新网址| 成人国产精品免费观看动漫| 亚洲激情五月婷婷| 欧美一区二区日韩| 99国产精品久久| 日韩电影免费在线观看网站| 久久免费视频一区| 91亚洲精品久久久蜜桃网站| 亚洲1区2区3区4区| 久久麻豆一区二区| 在线观看视频91| 国产一区二区三区在线观看精品 | 久久久精品蜜桃| 97se亚洲国产综合自在线观| 亚洲高清久久久| 国产视频在线观看一区二区三区| 91国偷自产一区二区三区成为亚洲经典 | 波多野洁衣一区| 肉丝袜脚交视频一区二区| 日本一二三不卡| 欧美夫妻性生活| a4yy欧美一区二区三区| 美女mm1313爽爽久久久蜜臀| 亚洲视频网在线直播| 精品久久久久一区二区国产| 91麻豆精品秘密| 久久成人免费电影| 亚洲综合在线电影| 国产三级欧美三级日产三级99| 欧美在线播放高清精品| 国产在线精品国自产拍免费| 一区二区在线电影| 久久久精品免费观看| 这里只有精品免费| 91亚洲精品一区二区乱码| 精品影院一区二区久久久| 亚洲18影院在线观看| 亚洲视频免费在线观看| 久久久精品国产免大香伊| 欧美情侣在线播放| 91福利视频网站| av一区二区三区在线| 国产盗摄一区二区三区| 久久福利视频一区二区| 亚洲一区二区高清| 亚洲女同一区二区| 18欧美乱大交hd1984| 久久久99免费| 精品国产伦一区二区三区观看方式 | 国产欧美日韩综合精品一区二区| 日韩精品一区二区三区在线观看| 欧美性大战久久久| 在线国产电影不卡| 91美女福利视频| 色欲综合视频天天天| 91麻豆成人久久精品二区三区| 国产美女av一区二区三区| 开心九九激情九九欧美日韩精美视频电影 | 日韩免费视频线观看| 日韩午夜激情视频| 在线成人av影院| 欧美一区二区三区视频在线| 欧美酷刑日本凌虐凌虐| 欧美挠脚心视频网站| 在线播放国产精品二区一二区四区| 在线免费观看日本一区| 欧美日韩久久久久久| 欧美日韩亚洲综合| 91麻豆精品国产| 日韩欧美色电影| 久久精品人人做人人综合| 欧美高清在线精品一区| 国产精品夫妻自拍| 亚洲最新视频在线观看| 天堂资源在线中文精品| 免费成人美女在线观看| 国产老妇另类xxxxx| 国产99久久精品| 色哟哟在线观看一区二区三区| 91网上在线视频| 欧美日韩精品综合在线| 精品国产乱码久久久久久夜甘婷婷| 久久伊99综合婷婷久久伊| 中文在线免费一区三区高中清不卡| 国产精品伦理一区二区| 亚洲国产精品一区二区www在线| 天堂精品中文字幕在线| 国产精品一区二区免费不卡 | 日韩欧美在线一区二区三区| 日韩你懂的电影在线观看| 中文字幕av在线一区二区三区| 一区二区三区丝袜| 久久精品噜噜噜成人av农村| 国产传媒久久文化传媒| 欧美性受xxxx| 久久久精品人体av艺术| 亚洲一区二区三区在线播放| 免费看欧美女人艹b| 成人白浆超碰人人人人| 欧美一区二区日韩| 中文字幕一区视频| 蜜臀久久久久久久| 99re热视频精品| 91精品在线麻豆| 一区二区三区精品| 国产福利精品导航| 91精品国产色综合久久不卡蜜臀| 国产亚洲综合av| 日韩在线a电影| 99vv1com这只有精品| 精品乱人伦小说| 亚洲成人在线网站| 99久久夜色精品国产网站| 精品人在线二区三区| 亚洲国产aⅴ天堂久久| 国产成人一级电影| 日韩欧美激情在线| 亚洲一区二区视频在线| 成人深夜在线观看| 日韩欧美资源站| 亚洲国产va精品久久久不卡综合| 成人免费视频视频在线观看免费 | 中文字幕制服丝袜成人av| 老司机免费视频一区二区| 欧美日韩亚洲综合在线| 一区二区三区在线观看欧美| 成人精品亚洲人成在线| 国产日本一区二区| 久久91精品国产91久久小草| 9191精品国产综合久久久久久| **欧美大码日韩| 国产成人精品免费在线| 日韩欧美一区在线观看| 日韩精品电影在线| 欧美精品丝袜中出| 亚洲www啪成人一区二区麻豆| 色综合久久综合| 亚洲美女电影在线| 在线中文字幕一区二区| 亚洲精品一二三四区| 色诱亚洲精品久久久久久| 亚洲欧美日韩国产手机在线 | 久久综合色播五月| 国产一区二区精品久久99 | 日韩美一区二区三区| 青青国产91久久久久久| 日韩一级完整毛片| 久久国产日韩欧美精品|