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

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

?? drivebrowser.cpp

?? 一個目標瀏覽器的源碼
?? CPP
字號:


/****************************************************
	The followinf Member Functions were copied from
	an article by Jeff Prosise available on the
	MSDN CD.

  1) AddDrives
  2) AddDirectoryNodes
  3) AddDumyNodes
  4) DeleteChildren
  5) GetDriveNode
  6) GetPathFromItem
  7) HasSubDirectory
  8) InitTree
  9) IsDriveNode
 10) IsMediaValid
 11) SetButtonState

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

// DriveBrowser.cpp : implementation file
//

#include "stdafx.h"
#include "DriveBrowsingTree.h"
#include "DriveBrowser.h"

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

#define ILI_CDDRV     0
#define ILI_CLSDFLD   1
#define ILI_DRIVE     2 
#define ILI_FLOPPYDRV 3 
#define ILI_MYCOMP    4
#define ILI_OPENFLD   5 
#define ILI_TEXTFILE  6 

#define MYCOMPUTER "My Computer"
/////////////////////////////////////////////////////////////////////////////
// CDriveBrowser

IMPLEMENT_DYNCREATE(CDriveBrowser, CTreeView)

CDriveBrowser::CDriveBrowser()
{
}

CDriveBrowser::~CDriveBrowser()
{
}


BEGIN_MESSAGE_MAP(CDriveBrowser, CTreeView)
	//{{AFX_MSG_MAP(CDriveBrowser)
	ON_WM_DESTROY()
	ON_NOTIFY_REFLECT(TVN_ITEMEXPANDING, OnItemexpanding)
	ON_NOTIFY_REFLECT(TVN_SELCHANGING, OnSelchanging)
	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDriveBrowser drawing

void CDriveBrowser::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: add draw code here
}

/////////////////////////////////////////////////////////////////////////////
// CDriveBrowser diagnostics

#ifdef _DEBUG
void CDriveBrowser::AssertValid() const
{
	CTreeView::AssertValid();
}

void CDriveBrowser::Dump(CDumpContext& dc) const
{
	CTreeView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDriveBrowser message handlers

BOOL CDriveBrowser::PreCreateWindow(CREATESTRUCT& cs) 
{
	// TODO: Add your specialized code here and/or call the base class
	cs.style |= TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES;	
	return CTreeView::PreCreateWindow(cs);
}


void CDriveBrowser::OnInitialUpdate() 
{
	CTreeView::OnInitialUpdate();
	
	// TODO: Add your specialized code here and/or call the base class

	CWinApp* pApp = AfxGetApp();

	//	ASSERT(m_pImageList != NULL);    // serious allocation failure checking
	m_pImageList.Create(16, 16, ILC_COLOR8 | ILC_MASK,  9, 9);

	m_pImageList.Add(pApp->LoadIcon(ICO_CDDRV));
	m_pImageList.Add(pApp->LoadIcon(ICO_CLSDFLD));
	m_pImageList.Add(pApp->LoadIcon(ICO_DRIVE));
	m_pImageList.Add(pApp->LoadIcon(ICO_FLOPPYDRV));
	m_pImageList.Add(pApp->LoadIcon(ICO_MYCOMP));
	m_pImageList.Add(pApp->LoadIcon(ICO_OPENFLD));
	m_pImageList.Add(pApp->LoadIcon(ICO_TEXTFILE));


	GetTreeCtrl().SetImageList(&m_pImageList , TVSIL_NORMAL);

	HTREEITEM hParent = GetTreeCtrl().InsertItem(MYCOMPUTER, ILI_MYCOMP, ILI_MYCOMP);
	InitTreeView(hParent);
	GetTreeCtrl().Expand(hParent, TVE_EXPAND); 

}

void CDriveBrowser::InitTreeView(HTREEITEM hParent)
{

	int nPos = 0;
    UINT nCount = 0;
    CString strDrive = "?:\\";

    DWORD dwDriveList = ::GetLogicalDrives ();

	CString cTmp;
	
    while (dwDriveList) {
        if (dwDriveList & 1) {
			cTmp = strDrive;
            strDrive.SetAt (0, 0x41 + nPos);
            if (AddDrives(strDrive , hParent))
                nCount++;
        }
        dwDriveList >>= 1;
        nPos++;
    }
    return;
}


BOOL CDriveBrowser::AddDrives(CString strDrive, HTREEITEM hParent)
{

	HTREEITEM hItem;
    UINT nType = ::GetDriveType ((LPCTSTR) strDrive);
    UINT nDrive = (UINT) strDrive[0] - 0x41;

    switch (nType) {

    case DRIVE_REMOVABLE:
		hItem = GetTreeCtrl().InsertItem(strDrive, ILI_FLOPPYDRV, ILI_FLOPPYDRV, hParent);
		AddDummyNode(hItem);
        break;

    case DRIVE_FIXED:
		hItem = GetTreeCtrl().InsertItem(strDrive,  ILI_DRIVE, ILI_DRIVE, hParent);
		AddDummyNode(hItem);
        break;

    case DRIVE_REMOTE:
        hItem = GetTreeCtrl().InsertItem(strDrive, ILI_DRIVE, ILI_DRIVE, hParent);
		AddDummyNode(hItem);
        break;

    case DRIVE_CDROM:
        hItem = GetTreeCtrl().InsertItem(strDrive, ILI_CDDRV, ILI_CDDRV, hParent);
		AddDummyNode(hItem);
        break;

    case DRIVE_RAMDISK:
        hItem = GetTreeCtrl().InsertItem(strDrive, ILI_CDDRV, ILI_CDDRV, hParent);
		AddDummyNode(hItem);
        break;

    default:
        return FALSE;
    }

	return true;

}

void CDriveBrowser::OnDestroy() 
{
	CTreeView::OnDestroy();
	
	// TODO: Add your message handler code here

	if(m_pImageList != NULL)
		m_pImageList.DeleteImageList();

}

void CDriveBrowser::AddDummyNode(HTREEITEM hItem)
{
	GetTreeCtrl().InsertItem ("", 0, 0, hItem);
}

CString CDriveBrowser::GetPathFromItem(HTREEITEM hItem)
{


    CString strPathName;
    while (hItem != NULL) 
	{
		CString string = GetTreeCtrl().GetItemText (hItem);
        if ((string.Right (1) != "\\") && !strPathName.IsEmpty ())
	        string += "\\";
		strPathName = string + strPathName;
        hItem = GetTreeCtrl().GetParentItem (hItem);
    }
	
	if(strPathName.Left(11) == MYCOMPUTER && strPathName.GetLength() > 11)
		strPathName = strPathName.Mid(12);

	return strPathName;

}

BOOL CDriveBrowser::IsPathValid(CString &strPathName)
{

    if (strPathName.GetLength() == 3)
        return TRUE;

    HANDLE hFind;
    WIN32_FIND_DATA fd;
    BOOL bResult = FALSE;

    if ((hFind = ::FindFirstFile ((LPCTSTR) strPathName, &fd)) != INVALID_HANDLE_VALUE) 
	{
        if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            bResult = TRUE;

        ::FindClose(hFind);
    }
    return bResult;
}

BOOL CDriveBrowser::IsMediaValid(CString &strPathName)
{

    // Return TRUE if the drive doesn't support removable media.
    UINT nDriveType = GetDriveType ((LPCTSTR) strPathName);
    if ((nDriveType != DRIVE_REMOVABLE) && (nDriveType != DRIVE_CDROM))
        return TRUE;

    // Return FALSE if the drive is empty (::GetVolumeInformation fails).
//    DWORD dwSerialNumber;
    CString strDrive = strPathName.Left (3);
    UINT nDrive = (UINT) strDrive[0] - 0x41;

//    if (!::GetVolumeInformation ((LPCTSTR) strDrive, NULL, 0,
//        &dwSerialNumber, NULL, NULL, NULL, 0)) {
//        m_dwMediaID[nDrive] = 0xFFFFFFFF;
//        return FALSE;
//    }

    // Also return FALSE if the disk's serial number has changed.
//    if ((m_dwMediaID[nDrive] != dwSerialNumber) &&
//        (m_dwMediaID[nDrive] != 0xFFFFFFFF)) {
//        m_dwMediaID[nDrive] = dwSerialNumber;
//        return FALSE;
//    }

    // Update our record of the serial number and return TRUE.
//    m_dwMediaID[nDrive] = dwSerialNumber;
    return TRUE;
}



HTREEITEM CDriveBrowser::GetDriveNode(HTREEITEM hItem)
{

    HTREEITEM hParent;

    do {
        hParent = GetTreeCtrl().GetParentItem (hItem);
        if (hParent != NULL)
            hItem = hParent;
    } while (hParent != NULL);
    return hItem;

}

UINT CDriveBrowser::DeleteChildren(HTREEITEM hItem)
{

    UINT nCount = 0;
    HTREEITEM hChild = GetTreeCtrl().GetChildItem (hItem);

    while (hChild != NULL) {
        HTREEITEM hNextItem = GetTreeCtrl().GetNextSiblingItem (hChild);
        GetTreeCtrl().DeleteItem (hChild);
        hChild = hNextItem;
        nCount++;

//		dwTreeItemCount--;

    }
    return nCount;

}

UINT CDriveBrowser::AddDirectoryNodes(HTREEITEM hItem, CString &strPathName)
{

    HANDLE hFind;
    WIN32_FIND_DATA fd;
    UINT nCount = 0;

    CString strFileSpec = strPathName;
    if (strFileSpec.Right (1) != "\\")
        strFileSpec += "\\";
    strFileSpec += "*.*";

    if ((hFind = ::FindFirstFile ((LPCTSTR) strFileSpec, &fd)) ==
        INVALID_HANDLE_VALUE) {
        if (IsDriveNode (hItem))
            AddDummyNode (hItem);
        return 0;
    }

	CWaitCursor wait;
//	m_LocalFiles.DeleteAllItems();

    do {
        if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
		{
            CString strFileName = (LPCTSTR) &fd.cFileName;
            if ((strFileName != ".") && (strFileName != "..")
				 && (fd.dwFileAttributes != 22))
			{
                HTREEITEM hChild =
                    GetTreeCtrl().InsertItem ((LPCTSTR) &fd.cFileName,
					ILI_CLSDFLD , ILI_OPENFLD , hItem , TVI_SORT);

                CString strNewPathName = strPathName;
                if (strNewPathName.Right (1) != "\\")
                    strNewPathName += "\\";

                strNewPathName += (LPCTSTR) &fd.cFileName;
                SetButtonState (hChild, strNewPathName);
                nCount++;
	        }
		}
		else
		{
           CString strFileName = (LPCTSTR) &fd.cFileName;

           HTREEITEM hChild =
                    GetTreeCtrl().InsertItem ((LPCTSTR) &fd.cFileName,
					ILI_TEXTFILE , ILI_TEXTFILE , hItem , TVI_SORT);
			
		}	

    } while (::FindNextFile (hFind, &fd));

    ::FindClose (hFind);

    return nCount;

}

void CDriveBrowser::SetButtonState(HTREEITEM hItem, CString &strPathName)
{
    if (HasSubdirectory (strPathName))
        AddDummyNode (hItem);
}

BOOL CDriveBrowser::HasSubdirectory(CString &strPathName)
{

    HANDLE hFind;
    WIN32_FIND_DATA fd;
    BOOL bResult = FALSE;

    CString strFileSpec = strPathName;
    if (strFileSpec.Right (1) != "\\")
        strFileSpec += "\\";
    strFileSpec += "*.*";

    if ((hFind = ::FindFirstFile ((LPCTSTR) strFileSpec, &fd)) !=
        INVALID_HANDLE_VALUE) {
        do {
            if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
                CString strFileName = (LPCTSTR) &fd.cFileName;
                if ((strFileName != ".") && (strFileName != ".."))
                    bResult = TRUE;
            }
        } while (::FindNextFile (hFind, &fd) && !bResult);
        ::FindClose (hFind);
    }

    return bResult;

}

BOOL CDriveBrowser::IsDriveNode(HTREEITEM hItem)
{

    return (GetTreeCtrl().GetParentItem (hItem) == NULL) ? TRUE : FALSE;
}

void CDriveBrowser::OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
    HTREEITEM hItem = pNMTreeView->itemNew.hItem;
    CString strPathName = GetPathFromItem (hItem);

    if (!IsMediaValid (strPathName)) 
	{
        HTREEITEM hRoot = GetDriveNode (hItem);
        GetTreeCtrl().Expand (hRoot, TVE_COLLAPSE);
        DeleteChildren (hRoot);
        AddDummyNode (hRoot);
        *pResult = TRUE;
        return;
    }


    // Delete the item if strPathName no longer specifies a valid path.
    if (!IsPathValid (strPathName)) 
	{
        if(strPathName != MYCOMPUTER && strPathName != "")
		{
			GetTreeCtrl().DeleteItem (hItem);
	        *pResult = TRUE;
		    return;
		}
    }

	CWaitCursor wait;
    // If the item is expanding, delete the dummy item attached to it
    // and add folder items. If the item is collapsing instead, delete
    // its folder items and add a dummy item if appropriate.
    if (pNMTreeView->action == TVE_EXPAND) 
	{
		if(strPathName != MYCOMPUTER)
		{
			DeleteChildren (hItem);
	        if (!AddDirectoryNodes (hItem, strPathName))
		        *pResult = TRUE;
		}
    }
    else {
		if(strPathName != MYCOMPUTER)
		{
			DeleteChildren (hItem);
	        if (IsDriveNode (hItem))
		        AddDummyNode (hItem);
			else
				SetButtonState (hItem, strPathName);
		}
    }	
		
	m_LocalPath = strPathName;

	*pResult = 0;
}


void CDriveBrowser::OnSelchanging(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here

    HTREEITEM hItem = pNMTreeView->itemNew.hItem;

    CString strPathName = GetPathFromItem (hItem);
	*pResult = FALSE;

	if(strPathName == MYCOMPUTER)
		return;

 	CWaitCursor wait;

    if (!AddDirectoryNodes (hItem, strPathName))
       *pResult = TRUE;


	m_LocalPath = strPathName;
	*pResult = 0;
}

void CDriveBrowser::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here

	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here

    HTREEITEM hItem = pNMTreeView->itemNew.hItem;
    CString strPathName = GetPathFromItem (hItem);

//	strPathName =  strPathName + GetTreeCtrl().GetItemText(hItem);	
	//ShellExecute(this->m_hWnd, "open", lvi.pszText, NULL, NULL, SW_SHOWNORMAL);
	
	*pResult = 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合999| 国产成都精品91一区二区三| 亚洲免费视频成人| 国产精品国产三级国产普通话蜜臀| 精品福利视频一区二区三区| 亚洲裸体xxx| 国产精品国产三级国产有无不卡 | 日韩一级黄色大片| 欧美精品欧美精品系列| 欧美丰满美乳xxx高潮www| 欧美电影在哪看比较好| 91精品国产乱| 日韩精品一区二区在线观看| 久久亚洲私人国产精品va媚药| 亚洲精品一区二区三区精华液| 久久九九久久九九| 国产精品久久久久久久久图文区| 国产精品二三区| 伊人性伊人情综合网| 亚洲国产视频直播| 日本视频一区二区| 国产一区二区三区美女| 成人综合婷婷国产精品久久蜜臀| 99久久伊人久久99| 欧美丝袜第三区| 精品国产乱码久久久久久免费| 国产婷婷色一区二区三区| 亚洲日本成人在线观看| 午夜精品在线看| 国产在线精品不卡| 成人白浆超碰人人人人| 欧美日韩一区不卡| 精品精品欲导航| 国产精品久久久久久久午夜片| 一区二区三区视频在线观看| 免费人成黄页网站在线一区二区| 国产成人亚洲综合色影视| 99久久国产免费看| 91精品国产高清一区二区三区| 久久综合色8888| 一区二区在线免费观看| 麻豆国产精品一区二区三区| 成人av网站免费| 欧美巨大另类极品videosbest | 91精品蜜臀在线一区尤物| 2024国产精品视频| 亚洲精品视频自拍| 久久成人18免费观看| 91亚洲大成网污www| 欧美一卡二卡三卡四卡| 成人欧美一区二区三区黑人麻豆| 秋霞影院一区二区| 99久久精品国产毛片| 欧美成人猛片aaaaaaa| 一区二区欧美视频| 国产伦精品一区二区三区视频青涩 | 欧美r级在线观看| 中文字幕一区二区三区四区| 蜜臀久久99精品久久久久久9| 91女厕偷拍女厕偷拍高清| 日韩免费高清电影| 亚洲一区二区三区在线看| 国产成人综合精品三级| 91精品国产入口在线| 亚洲乱码国产乱码精品精小说| 国产一二精品视频| 日韩一区和二区| 一区二区三区**美女毛片| 成人午夜精品一区二区三区| 正在播放一区二区| 亚洲一区二区视频| 99久久久国产精品| 国产欧美日韩精品在线| 精品亚洲国产成人av制服丝袜| 欧美色图天堂网| 亚洲特级片在线| 国产91精品免费| 亚洲精品一区二区三区在线观看| 日韩成人一级片| 欧美亚一区二区| 亚洲欧美电影院| 99久久夜色精品国产网站| 久久久久久97三级| 国产综合久久久久影院| 日韩欧美国产三级| 日本成人中文字幕| 欧美猛男超大videosgay| 亚洲精品国产成人久久av盗摄| 波多野结衣视频一区| 国产欧美一区二区精品久导航 | 国产成人午夜精品影院观看视频| 3d动漫精品啪啪1区2区免费| 亚洲综合在线电影| 波多野结衣中文一区| 中文字幕国产一区二区| 国产99一区视频免费| 久久久久久综合| 激情综合色播激情啊| 精品欧美一区二区久久| 麻豆成人91精品二区三区| 亚洲青青青在线视频| 波多野洁衣一区| 亚洲日本丝袜连裤袜办公室| 91色乱码一区二区三区| 亚洲精品免费视频| 欧美系列在线观看| 亚洲综合色噜噜狠狠| 欧美日韩免费不卡视频一区二区三区| 亚洲一本大道在线| 欧美日韩小视频| 日韩成人伦理电影在线观看| 日韩欧美精品三级| 国产真实乱偷精品视频免| 国产亚洲欧美在线| 成人伦理片在线| 亚洲另类色综合网站| 欧美日韩欧美一区二区| 日本va欧美va精品| 精品国产麻豆免费人成网站| 国产精品一区免费在线观看| 国产精品国产三级国产三级人妇 | 久久老女人爱爱| 国产成人久久精品77777最新版本| 久久久久久久综合日本| 成人一区二区三区中文字幕| 椎名由奈av一区二区三区| 91国偷自产一区二区使用方法| 午夜精品久久久久久久蜜桃app| 日韩一区国产二区欧美三区| 国产盗摄女厕一区二区三区| 亚洲天堂中文字幕| 91.com在线观看| 激情av综合网| 综合电影一区二区三区 | 亚洲精品在线观看网站| 不卡一区二区中文字幕| 亚洲丶国产丶欧美一区二区三区| 欧美丰满美乳xxx高潮www| 国产乱国产乱300精品| 亚洲欧洲国产日本综合| 欧美乱熟臀69xxxxxx| 国产老女人精品毛片久久| 亚洲人成精品久久久久久| 91精品国产综合久久久蜜臀粉嫩 | 美女视频免费一区| 国产精品午夜春色av| 欧美亚洲禁片免费| 国产一区二区三区免费在线观看| 国产精品久久久久毛片软件| 欧美日韩情趣电影| 国产成人综合精品三级| 亚洲一区二区黄色| 久久综合狠狠综合| 在线看一区二区| 国精产品一区一区三区mba视频| 亚洲卡通欧美制服中文| 精品福利在线导航| 在线免费观看视频一区| 国产精品资源在线观看| 亚洲v日本v欧美v久久精品| 国产亚洲欧洲997久久综合| 国产精品污www在线观看| 欧美视频日韩视频| 懂色av中文一区二区三区| 午夜av区久久| 国产精品久久看| 欧美sm极限捆绑bd| 欧美视频一区二区三区| 成人深夜视频在线观看| 美美哒免费高清在线观看视频一区二区| 亚洲天堂网中文字| 国产午夜精品久久久久久免费视| 欧美精品精品一区| 99久久国产综合色|国产精品| 国产在线精品一区二区不卡了| 偷拍亚洲欧洲综合| 亚洲精品久久久久久国产精华液| 久久久久久99精品| 欧美成人猛片aaaaaaa| 欧美剧在线免费观看网站| 91免费在线看| 99久久综合色| 国产福利不卡视频| 久久成人久久鬼色| 视频一区国产视频| 亚洲资源中文字幕| 亚洲精品一二三| 中文字幕在线观看一区| 国产亚洲综合在线| 久久婷婷色综合| 日韩欧美三级在线| 欧美电影在哪看比较好| 欧美日韩一区二区三区高清| 一本大道av一区二区在线播放 | 国产农村妇女毛片精品久久麻豆| 日韩欧美国产高清| 欧美一级理论片| 欧美高清性hdvideosex| 欧美午夜电影在线播放| 在线国产电影不卡|