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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dirtreectrl.cpp

?? 圖像處理軟件,功能比較基礎(chǔ)
?? CPP
字號:
// DirTreeCtrl.cpp: 
// 
// wrapped CTreeCtrl to select and or display folders and files (optional )
// 

#include "stdafx.h"

#include "DirTreeCtrl.h"
#ifndef SORTSTRINGARRAY_H
#define SORTSTRINGARRAY_H
#include "SortStringArray.h"
#endif


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

/////////////////////////////////////////////////////////////////////////////
// CDirTreeCtrl

CDirTreeCtrl::CDirTreeCtrl()
{
	m_strRoot = "";      // Auf Leer setzen
}

CDirTreeCtrl::~CDirTreeCtrl()
{
	m_imgList.Detach();
}


BEGIN_MESSAGE_MAP(CDirTreeCtrl, CTreeCtrl)
	//{{AFX_MSG_MAP(CDirTreeCtrl)
	ON_NOTIFY_REFLECT(TVN_ITEMEXPANDED, OnItemexpanded)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Behandlungsroutinen f黵 Nachrichten CDirTreeCtrl 

BOOL CDirTreeCtrl::DisplayTree(LPCTSTR strRoot, BOOL bFiles)
{
	DWORD dwStyle = GetStyle();   // read the windowstyle
	if ( dwStyle & TVS_EDITLABELS ) 
	{
		// Don't allow the user to edit ItemLabels
		ModifyStyle( TVS_EDITLABELS , 0 );
	}
	
	// Display the DirTree with the Rootname e.g. C:\
	// if Rootname == NULL then Display all Drives on this PC
    // First, we need the system-ImageList
	
	DeleteAllItems();

	if ( !GetSysImgList() )
		return FALSE;
    m_bFiles = bFiles;  // if TRUE, Display Path- and Filenames 
	if ( strRoot == NULL || strRoot[0] == '\0' )
	{
		if ( !DisplayDrives() )
			return FALSE;
		m_strRoot = "";
	}
    else
	{
		m_strRoot = strRoot;
		if ( m_strRoot.Right(1) != '\\' )
			m_strRoot += "\\";
		HTREEITEM hParent = AddItem( TVI_ROOT, m_strRoot );
		DisplayPath( hParent, strRoot );
	}
	return TRUE;	
}
/////////////////////////////////////////////////
BOOL CDirTreeCtrl::GetSysImgList()
/////////////////////////////////////////////////
{
	SHFILEINFO shFinfo;
	HIMAGELIST hImgList = NULL;

	if ( GetImageList( TVSIL_NORMAL ) )
		m_imgList.Detach();
	
	hImgList = (HIMAGELIST)SHGetFileInfo( "C:\\",
							  0,
							  &shFinfo,
							  sizeof( shFinfo ),
							  SHGFI_SYSICONINDEX | 
							  SHGFI_SMALLICON );
	if ( !hImgList )
	{
		m_strError = "Cannot retrieve the Handle of SystemImageList!";
		return FALSE;
	}

	m_imgList.m_hImageList = hImgList;    
    
	SetImageList( &m_imgList, TVSIL_NORMAL );
	return TRUE;   // OK
}

BOOL CDirTreeCtrl::DisplayDrives()
{
	//
	// Displaying the Availible Drives on this PC
	// This are the First Items in the TreeCtrl
	//
	DeleteAllItems();
	char  szDrives[128];
	char* pDrive;

	if ( !GetLogicalDriveStrings( sizeof(szDrives), szDrives ) )
	{
		m_strError = "Error Getting Logical DriveStrings!";
		return FALSE;
	}

	pDrive = szDrives;
	while( *pDrive )
	{
		HTREEITEM hParent = AddItem( TVI_ROOT, pDrive );
		if ( FindSubDir( pDrive ) )
			InsertItem( "", 0, 0, hParent );
		pDrive += strlen( pDrive ) + 1;
	}


	return TRUE;

}

void CDirTreeCtrl::DisplayPath(HTREEITEM hParent, LPCTSTR strPath)
{
	//
	// Displaying the Path in the TreeCtrl
	//
	CFileFind find;
	CString   strPathFiles = strPath;
	BOOL      bFind;
	CSortStringArray strDirArray;
	CSortStringArray strFileArray;
	
	if ( strPathFiles.Right(1) != "\\" )
		strPathFiles += "\\";
	strPathFiles += "*.*";

	bFind = find.FindFile( strPathFiles );

	while ( bFind )
	{
		bFind = find.FindNextFile();
		if ( find.IsDirectory() && !find.IsDots() )
		{		
			strDirArray.Add( find.GetFilePath() );
		}
		if ( !find.IsDirectory() && m_bFiles )
			strFileArray.Add( find.GetFilePath() );

	}
    
	strDirArray.Sort();
	SetRedraw( FALSE );
	CWaitCursor wait;
    
	for ( int i = 0; i < strDirArray.GetSize(); i++ )
	{
			HTREEITEM hItem = AddItem( hParent, strDirArray.GetAt(i) );
			if ( FindSubDir( strDirArray.GetAt(i) ) )
				InsertItem( "", 0, 0, hItem );
	}

	if ( m_bFiles )
	{
		strFileArray.Sort();
		for ( i = 0; i < strFileArray.GetSize(); i++ )
		{
			HTREEITEM hItem = AddItem( hParent, strFileArray.GetAt(i) );
			
		}
	}
    
	SetRedraw( TRUE );

	
}

HTREEITEM CDirTreeCtrl::AddItem(HTREEITEM hParent, LPCTSTR strPath)
{
	// Adding the Item to the TreeCtrl with the current Icons
	SHFILEINFO shFinfo;
	int iIcon, iIconSel;
    CString    strTemp = strPath;
    
	if ( strTemp.Right(1) != '\\' )
		 strTemp += "\\";
	if ( !SHGetFileInfo( strTemp,
						0,
						&shFinfo,
						sizeof( shFinfo ),
						SHGFI_ICON | 
					    SHGFI_SMALLICON ) )
	{
		m_strError = "Error Gettting SystemFileInfo!";
		return NULL;
	}

	iIcon = shFinfo.iIcon;

	// we only need the index from the system image list

	DestroyIcon( shFinfo.hIcon );

	if ( !SHGetFileInfo( strTemp,
						0,
						&shFinfo,
						sizeof( shFinfo ),
						SHGFI_ICON | SHGFI_OPENICON |
					    SHGFI_SMALLICON ) )
	{
		m_strError = "Error Gettting SystemFileInfo!";
		return NULL;
	}

	iIconSel = shFinfo.iIcon;

	// we only need the index of the system image list

	DestroyIcon( shFinfo.hIcon );

	if ( strTemp.Right(1) == "\\" )
		strTemp.SetAt( strTemp.GetLength() - 1, '\0' );
	
	if ( hParent == TVI_ROOT )
		return InsertItem( strTemp, iIcon, iIconSel, hParent );
	
	return InsertItem( GetSubPath( strTemp ), iIcon, iIconSel, hParent );
}

LPCTSTR CDirTreeCtrl::GetSubPath(LPCTSTR strPath)
{
	//
	// getting the last SubPath from a PathString
	// e.g. C:\temp\readme.txt
	// the result = readme.txt
	static CString strTemp;
	int     iPos;

	strTemp = strPath;
	if ( strTemp.Right(1) == '\\' )
		 strTemp.SetAt( strTemp.GetLength() - 1, '\0' );
	iPos = strTemp.ReverseFind( '\\' );
	if ( iPos != -1 )
	    strTemp = strTemp.Mid( iPos + 1);

	return (LPCTSTR)strTemp;
}

BOOL CDirTreeCtrl::FindSubDir( LPCTSTR strPath)
{
	//
	// Are there subDirs ?
	//
	CFileFind find;
	CString   strTemp = strPath;
	BOOL      bFind;

	if ( strTemp[strTemp.GetLength()-1] == '\\' )
		strTemp += "*.*";
	else
		strTemp += "\\*.*";
		
	bFind = find.FindFile( strTemp );
	
	
	while ( bFind )
	{
		bFind = find.FindNextFile();

		if ( find.IsDirectory() && !find.IsDots() )
		{
			return TRUE;
		}
		if ( !find.IsDirectory() && m_bFiles && !find.IsHidden() )
			return TRUE;
		
	}

	return FALSE;

}

void CDirTreeCtrl::OnItemexpanded(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	CString strPath;
	 
	if ( pNMTreeView->itemNew.state & TVIS_EXPANDED )
	{
		//UINT uTest = TVIS_EXPANDEDONCE;
		ExpandItem( pNMTreeView->itemNew.hItem, TVE_EXPAND );
	    /*
		//
		// Delete All items
		// And display the subpath
		//
		HTREEITEM hChild = GetChildItem( pNMTreeView->itemNew.hItem );
		while ( hChild )
		{
			DeleteItem( hChild );
			hChild = GetChildItem( pNMTreeView->itemNew.hItem );
		}
        
		strPath = GetFullPath( pNMTreeView->itemNew.hItem );
		DisplayPath( pNMTreeView->itemNew.hItem, strPath );
		*/
	}
	else
	{
		//
		// Delete the Items, but leave one there, for 
		// expanding the item next time
		//
		HTREEITEM hChild = GetChildItem( pNMTreeView->itemNew.hItem );
				
		while ( hChild ) 
		{
			DeleteItem( hChild );
			hChild = GetChildItem( pNMTreeView->itemNew.hItem );
		}
		InsertItem( "", pNMTreeView->itemNew.hItem );
	}

	*pResult = 0;
}

CString CDirTreeCtrl::GetFullPath(HTREEITEM hItem)
{
	// get the Full Path of the item
	CString strReturn;
	CString strTemp;
	HTREEITEM hParent = hItem;

	strReturn = "";

	while ( hParent )
	{
		
		strTemp  = GetItemText( hParent );
		strTemp += "\\";
		strReturn = strTemp + strReturn;
		hParent = GetParentItem( hParent );
	}
    
	strReturn.TrimRight( '\\' );

    return strReturn;

}

BOOL CDirTreeCtrl::SetSelPath(LPCTSTR strPath)
{
	// Setting the Selection in the Tree
	HTREEITEM hParent  = TVI_ROOT;
	int       iLen    = strlen(strPath) + 2;
	char*     pszPath = new char[iLen];
	char*     pPath   = pszPath;
	BOOL      bRet    = FALSE;
    
	if ( !IsValidPath( strPath ) )
	{
		delete [] pszPath; // this must be added 29.03.99
		return FALSE;
	}
		
	strcpy( pszPath, strPath );
	strupr( pszPath );
	
	if ( pszPath[strlen(pszPath)-1] != '\\' )
		strcat( pszPath, "\\" );
    
	int iLen2 = strlen( pszPath );
	
	for (WORD i = 0; i < iLen2; i++ )
	{
		if ( pszPath[i] == '\\' )
		{
			SetRedraw( FALSE );
			pszPath[i] = '\0';
			hParent = SearchSiblingItem( hParent, pPath );
			if ( !hParent )  // Not found!
				break;
			else
			{				
				// Info:
				// the notification OnItemExpanded 
				// will not called every time 
				// after the call Expand. 
				// You must call Expand with TVE_COLLAPSE | TVE_COLLAPSERESET
				// to Reset the TVIS_EXPANDEDONCE Flag
				
				UINT uState;
				uState = GetItemState( hParent, TVIS_EXPANDEDONCE );
				if ( uState )
				{
					Expand( hParent, TVE_EXPAND );
					Expand( hParent, TVE_COLLAPSE | TVE_COLLAPSERESET );
					InsertItem("", hParent ); // insert a blank child-item
					Expand( hParent, TVE_EXPAND ); // now, expand send a notification
				}
				else
					Expand( hParent, TVE_EXPAND );
			}
			pPath += strlen(pPath) + 1;
		}
	}

	delete [] pszPath;
	
	if ( hParent ) // Ok the last subpath was found
	{		
		SelectItem( hParent ); // select the last expanded item
		bRet = TRUE;
	}
	else
	{
		bRet = FALSE;
	}
	
	SetRedraw( TRUE );

    return bRet;
}

HTREEITEM CDirTreeCtrl::SearchSiblingItem( HTREEITEM hItem, LPCTSTR strText)
{
	HTREEITEM hFound = GetChildItem( hItem );
	CString   strTemp;
	while ( hFound )
	{
		strTemp = GetItemText( hFound );
        strTemp.MakeUpper();
		if ( strTemp == strText )
			return hFound;
		hFound = GetNextItem( hFound, TVGN_NEXT );
	}

	return NULL;
}


void CDirTreeCtrl::ExpandItem(HTREEITEM hItem, UINT nCode)
{	
	CString strPath;
	
	if ( nCode == TVE_EXPAND )
	{
		HTREEITEM hChild = GetChildItem( hItem );
		while ( hChild )
		{
			DeleteItem( hChild );
			hChild = GetChildItem( hItem );
		}
        
		strPath = GetFullPath( hItem );
		DisplayPath( hItem, strPath );
	}
}

BOOL CDirTreeCtrl::IsValidPath(LPCTSTR strPath)
{
	// This function check the Pathname
	
	HTREEITEM hChild;
	CString   strItem;
	CString   strTempPath = strPath;
	BOOL      bFound = FALSE;
	CFileFind find;

	hChild = GetChildItem( TVI_ROOT );
	strTempPath.MakeUpper();
	strTempPath.TrimRight('\\');

	while ( hChild )
	{
		strItem = GetItemText( hChild );
		strItem.MakeUpper();
		if ( strItem == strTempPath.Mid( 0, strItem.GetLength() ) )
		{
			bFound = TRUE;
			break;
		}
		hChild = GetNextItem( hChild, TVGN_NEXT );
	}
    
	if ( !bFound )
		return FALSE;

	strTempPath += "\\nul";
	if ( find.FindFile( strTempPath ) )
		return TRUE;
     
	return FALSE;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美网站大全在线观看| 香蕉乱码成人久久天堂爱免费| 国产精品剧情在线亚洲| 亚洲另类在线视频| 日韩av电影免费观看高清完整版| 国产一区二区免费视频| 色哟哟亚洲精品| 日韩一区和二区| 国产精品蜜臀av| 天天综合天天综合色| 国产成人午夜精品影院观看视频| 99国产欧美另类久久久精品| 欧美日韩1区2区| 久久精品水蜜桃av综合天堂| 伊人一区二区三区| 精品在线亚洲视频| 一本到一区二区三区| 欧美mv和日韩mv国产网站| 亚洲人成伊人成综合网小说| 日本欧美加勒比视频| 波多野结衣中文字幕一区二区三区| 欧美色图一区二区三区| 精品国产电影一区二区| 亚洲免费av网站| 国产一区视频导航| 欧美午夜一区二区三区| 久久久久国产一区二区三区四区| 一区二区日韩电影| 成人一区二区视频| 91精品国产综合久久久久久久| 国产精品人成在线观看免费 | 国产丶欧美丶日本不卡视频| 欧洲精品中文字幕| 国产欧美精品区一区二区三区| 偷拍一区二区三区| 91麻豆国产精品久久| 亚洲精品一区在线观看| 亚洲国产精品久久艾草纯爱| 成人福利在线看| 欧美成人国产一区二区| 一级日本不卡的影视| aaa亚洲精品一二三区| 欧美精品一区视频| 日本午夜一本久久久综合| 色综合久久久久久久| 欧美国产在线观看| 老司机精品视频导航| 欧美日韩精品高清| 一区二区三区在线不卡| 成年人国产精品| 久久久久99精品国产片| 奇米精品一区二区三区在线观看一| 在线精品视频一区二区| 中文字幕在线一区| 国产成人精品一区二区三区四区 | 欧美日韩一二区| 日韩一区二区三区四区| 亚洲视频在线一区观看| 日韩国产一二三区| 欧美男男青年gay1069videost| 国产日韩影视精品| 免费在线观看视频一区| 在线观看日韩国产| 国产精品久久久久久妇女6080| 久久99久久99精品免视看婷婷| 欧美中文字幕一区| 综合亚洲深深色噜噜狠狠网站| 国内外成人在线视频| 欧美另类z0zxhd电影| 一个色综合网站| 91在线免费播放| 国产精品日韩成人| 奇米一区二区三区| 91精品国产综合久久久久久漫画| 亚洲精品国产高清久久伦理二区| 国v精品久久久网| 国产偷国产偷亚洲高清人白洁| 免费在线一区观看| 欧美嫩在线观看| 中文字幕中文乱码欧美一区二区| 成人一道本在线| 久久久影视传媒| 另类调教123区| 亚洲精品在线电影| 精品在线播放免费| 欧美成人乱码一区二区三区| 日韩精品一区第一页| 欧美剧情电影在线观看完整版免费励志电影| 亚洲一区在线观看视频| 色欧美日韩亚洲| 亚洲自拍另类综合| 欧美色精品在线视频| 亚洲一区二区偷拍精品| 欧美亚洲综合色| 亚洲一二三四在线观看| 欧美图片一区二区三区| 成人欧美一区二区三区在线播放| 91久久奴性调教| 亚洲妇女屁股眼交7| 欧美老人xxxx18| 免费成人深夜小野草| 欧美草草影院在线视频| 狠狠色丁香婷婷综合| 久久精品亚洲乱码伦伦中文| 盗摄精品av一区二区三区| 18欧美亚洲精品| 欧洲av在线精品| 午夜精品爽啪视频| 欧美一区二区在线看| 精品一区二区国语对白| 久久精品一区二区三区av| 成人毛片在线观看| 玉足女爽爽91| 欧美无人高清视频在线观看| 麻豆免费看一区二区三区| 久久蜜桃av一区二区天堂| 久久99久久99| 亚洲乱码日产精品bd| 欧美日韩精品二区第二页| 麻豆极品一区二区三区| 国产三级欧美三级| 99视频精品在线| 亚州成人在线电影| 精品欧美一区二区久久| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美日本一区二区在线观看| 免费成人在线播放| 欧美国产1区2区| 欧洲一区在线电影| 麻豆精品新av中文字幕| 精品少妇一区二区三区免费观看| 91免费版在线看| 日产欧产美韩系列久久99| 国产网站一区二区| 欧美色综合影院| 国产精品夜夜爽| 亚洲一级电影视频| 久久精品一区蜜桃臀影院| 欧美美女喷水视频| 福利电影一区二区| 午夜不卡在线视频| 日本一区二区综合亚洲| 欧美日韩一级视频| 国产成人高清视频| 亚洲男女一区二区三区| 欧美sm极限捆绑bd| 91丨porny丨中文| 麻豆精品在线视频| 有码一区二区三区| 国产日韩影视精品| 欧美精三区欧美精三区| 成人国产免费视频| 日韩av一级电影| 亚洲精品亚洲人成人网 | 蜜臀av性久久久久蜜臀av麻豆| 国产精品乱码一区二区三区软件| 欧美日韩免费视频| 不卡一区在线观看| 捆绑紧缚一区二区三区视频| 国产精品久久久久久久久免费桃花 | 亚洲一区在线观看网站| 中文字幕国产一区二区| 欧美va日韩va| 欧美女孩性生活视频| 94色蜜桃网一区二区三区| 精品一二三四区| 日韩中文字幕亚洲一区二区va在线| 最好看的中文字幕久久| 国产亚洲午夜高清国产拍精品| 99久久综合狠狠综合久久| 国产福利精品导航| 蜜桃精品视频在线| 亚洲一级在线观看| 久久精品视频免费观看| 欧美精品免费视频| 99精品国产视频| 国产一区二区不卡| 美女网站视频久久| 午夜激情久久久| 亚洲国产美女搞黄色| 中文字幕欧美日韩一区| 欧美成人激情免费网| 在线不卡中文字幕播放| 91免费观看视频在线| www.色综合.com| 国产精品99久久久| 国产麻豆91精品| 久久成人免费网| 狠狠久久亚洲欧美| 黄色小说综合网站| 激情综合色综合久久| 久久精品国产一区二区三 | 福利91精品一区二区三区| 国产一区二区精品在线观看| 久久疯狂做爰流白浆xx| 日本人妖一区二区| 日韩主播视频在线| 日本在线播放一区二区三区| 亚洲高清视频中文字幕| 亚洲免费观看高清在线观看|