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

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

?? countingdlg.cpp

?? visual c++ 實例編程
?? 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一区二区三区免费野_久草精品视频
久久精品亚洲精品国产欧美kt∨| 国产成人av资源| 亚洲欧洲国产专区| 久久蜜桃一区二区| 精品免费日韩av| 精品国产sm最大网站免费看| 精品国产一区二区三区久久影院 | 亚洲国产精品视频| 婷婷中文字幕综合| 天堂久久久久va久久久久| 五月天欧美精品| 成人动漫精品一区二区| 在线免费观看日本欧美| 7777精品伊人久久久大香线蕉最新版| 日韩一区二区三| 久久久亚洲国产美女国产盗摄| 一区二区三区加勒比av| 精品一区二区影视| av电影在线观看完整版一区二区| 日韩美女主播在线视频一区二区三区| 91精品在线观看入口| 亚洲综合色婷婷| 精品一区二区三区在线播放视频| 欧美三级乱人伦电影| 精品国产自在久精品国产| 蜜臀久久久久久久| 国产米奇在线777精品观看| 91农村精品一区二区在线| 69久久99精品久久久久婷婷| 一区二区三区在线免费播放| 91精品1区2区| 国产精品视频一二三区| 美女视频黄久久| 欧美一区二区久久久| 国产精品传媒视频| 久久成人18免费观看| 欧美亚洲综合一区| 国产网站一区二区三区| 国产69精品久久久久777| 欧美老肥妇做.爰bbww视频| 欧美国产精品一区二区| 免播放器亚洲一区| 久久亚洲一级片| 日韩av网站免费在线| 91精品国产福利| 日韩在线a电影| 日韩欧美另类在线| 国产精品66部| 日韩精品一区二区三区视频播放| 秋霞午夜av一区二区三区| 欧美成人一区二区三区片免费 | 亚洲一区中文日韩| 在线91免费看| 国产乱子伦一区二区三区国色天香| 精品国产91久久久久久久妲己| 成人毛片在线观看| 国产欧美一二三区| 国产在线不卡一卡二卡三卡四卡| 久久九九影视网| 欧美亚一区二区| 久久国产麻豆精品| 亚洲日本欧美天堂| av电影在线观看不卡| 婷婷久久综合九色综合绿巨人| 精品国产露脸精彩对白| av日韩在线网站| 麻豆精品一二三| 中文字幕在线观看一区| 91精品欧美久久久久久动漫| 国产精品一区久久久久| 亚洲午夜精品17c| 久久综合视频网| 欧美三区在线观看| 成人性生交大片免费看中文| 五月天婷婷综合| 国产精品久久久久久妇女6080| 欧美日本一道本| 五月激情综合婷婷| 日本不卡高清视频| 中文字幕一区在线| 精品国产sm最大网站免费看| 欧美性一级生活| 国产jizzjizz一区二区| 蜜臀a∨国产成人精品| 亚洲乱码国产乱码精品精98午夜| 色综合久久88色综合天天| 亚洲激情av在线| 国产精品美女久久福利网站| 精品人在线二区三区| 欧美少妇一区二区| 色偷偷88欧美精品久久久| 大胆欧美人体老妇| 紧缚捆绑精品一区二区| 天天色图综合网| 亚洲综合区在线| 亚洲色图视频网| 最新中文字幕一区二区三区 | 国产精品1024| 精品写真视频在线观看| 日本午夜一本久久久综合| 亚洲色图另类专区| 国产精品毛片久久久久久久| 久久婷婷国产综合国色天香| 91精品国产色综合久久不卡蜜臀| 欧美三级视频在线播放| 日韩精品一区二区三区四区| 欧美另类z0zxhd电影| 欧美日韩精品系列| 欧美日韩国产天堂| 在线电影国产精品| 欧美日韩精品免费观看视频| 欧美日韩国产天堂| 日韩一二三区不卡| 精品国产乱码久久久久久牛牛| 日韩欧美国产电影| 亚洲精品在线观| 国产偷v国产偷v亚洲高清| 久久久久久9999| 国产精品久久久久桃色tv| 成人免费在线视频| 亚洲乱码国产乱码精品精可以看| 亚洲激情成人在线| 午夜精品123| 麻豆久久久久久久| 国产精品一区二区果冻传媒| 成人午夜电影久久影院| 99久久久免费精品国产一区二区| 男女男精品视频网| 国产精品综合在线视频| 成人晚上爱看视频| 色欧美88888久久久久久影院| 欧美色男人天堂| 日韩一级片网址| 久久看人人爽人人| 亚洲图片另类小说| 亚洲成人免费在线| 亚洲一区二区三区四区的 | 国产在线播放一区| 粉嫩aⅴ一区二区三区四区五区| 成人爱爱电影网址| 欧美日韩国产a| 久久久久久久久久久久电影| 中文字幕一区在线观看视频| 婷婷丁香激情综合| 国产精品一区三区| 欧美日韩国产乱码电影| 国产日韩欧美高清在线| 一区二区三区欧美日| 韩国女主播一区二区三区| 久久国产综合精品| 99久久国产免费看| 欧美videossexotv100| 亚洲欧洲三级电影| 九一久久久久久| 色综合激情久久| 久久免费电影网| 亚洲国产裸拍裸体视频在线观看乱了 | 久久色.com| 亚洲成人激情自拍| 成人久久18免费网站麻豆 | 乱中年女人伦av一区二区| 99精品一区二区| 日韩视频免费观看高清在线视频| 国产欧美va欧美不卡在线| 性做久久久久久久久| av午夜一区麻豆| 精品黑人一区二区三区久久| 亚洲在线中文字幕| aaa欧美色吧激情视频| 日韩一区二区视频| 亚洲一区二区在线观看视频| 国产激情一区二区三区桃花岛亚洲 | 国产三级精品在线| 日韩激情视频在线观看| 91视频观看免费| 久久久久久电影| 九九视频精品免费| 91精品国产综合久久福利软件| 亚洲欧美日本在线| 日韩国产精品久久久| 一本久久a久久免费精品不卡| 国产亚洲1区2区3区| 乱中年女人伦av一区二区| 欧美妇女性影城| 亚洲电影中文字幕在线观看| 91久久精品午夜一区二区| 自拍偷拍欧美激情| a在线欧美一区| 最新成人av在线| 不卡的av网站| 最新久久zyz资源站| caoporn国产精品| 中文字幕一区二区三区在线观看| 国产精品一二三四| 欧美高清在线精品一区| 国产91精品久久久久久久网曝门| 久久网站热最新地址| 欧美理论电影在线| 亚洲成a天堂v人片| 这里只有精品视频在线观看|