⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 choosedirdlg.cpp

📁 与vc++界面十分类似的词法分析器
💻 CPP
字号:
// ChooseDirDlg.cpp : implementation file
//

#include "stdafx.h"
#include "cff.h"
#include "ChooseDirDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CChooseDirDlg dialog


CChooseDirDlg::CChooseDirDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CChooseDirDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CChooseDirDlg)
	m_directory = _T("");
	//}}AFX_DATA_INIT
}


void CChooseDirDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CChooseDirDlg)
	DDX_Control(pDX, IDT_CHOOSE, m_choose);
	DDX_Control(pDX, IDC_DIRVE, m_dirve);
	DDX_Text(pDX, IDE_DIRECTORY, m_directory);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CChooseDirDlg, CDialog)
	//{{AFX_MSG_MAP(CChooseDirDlg)
	ON_CBN_SELCHANGE(IDC_DIRVE, OnSelchangeDirve)
	ON_NOTIFY(TVN_SELCHANGED, IDT_CHOOSE, OnSelchangedChoose)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChooseDirDlg message handlers

void CChooseDirDlg::OnOK() 
{
	// TODO: Add extra validation here
	_chdir(m_directory);
	theApp.WriteProfileString("Work Directory", "Path", m_directory);
	CDialog::OnOK();
}

BOOL CChooseDirDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_imageList.Create(16, 15, TRUE|ILC_COLORDDB|ILC_COLOR16, 1, 0);
	HICON hIcon = NULL;

    hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
	MAKEINTRESOURCE(IDI_CLOSE), IMAGE_ICON, 16, 15, 0);
	m_imageList.Add(hIcon);

	hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), 
	MAKEINTRESOURCE(IDI_OPEN), IMAGE_ICON, 16, 15, 0);
	m_imageList.Add(hIcon);

	char buffer[_MAX_PATH];
   /* Get the current working directory: */
    _getcwd(buffer,_MAX_PATH);
	int drive,ch=0;
	CString m_drive;
	for(drive=1;drive<=26;drive++)
		if(!_chdrive(drive))
		{
			m_drive.Format("%c",drive+'A'-1);
			m_drive+=":";
			m_dirve.InsertString(ch,m_drive);
			ch++;
		}
	chdir(buffer);
	drive=_getdrive()-1;
	m_drive.Format("%c",drive+'A');
	m_drive+=":";
	//m_dirve.GetLBText(drive,m_drive);
	m_dirve.SelectString(0,m_drive);
	m_Root=m_drive;
	//HICON hicon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_CLASS));
	//m_dirve.SetIcon(hicon,true);
	m_choose.SetImageList(&m_imageList,TVSIL_NORMAL);
	CString path;
	path=m_drive;
	HTREEITEM TreeItem=m_choose.InsertItem(m_Root,0,1,TVI_ROOT,TVI_SORT);
	m_directory=m_Root+"\\";
	path+="\\*.*";
	FindFile(path,TreeItem);
	m_choose.Expand(TreeItem,TVE_EXPAND);
    m_Expand=TRUE;
	UpdateData(false);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CChooseDirDlg::FindFile(CString pszPath, HTREEITEM TreeItem)
{
	CString str;
	HANDLE hFind;
	WIN32_FIND_DATA fd ;
	hFind=::FindFirstFile((LPCTSTR)pszPath,&fd);
	if(hFind!=INVALID_HANDLE_VALUE)
	{
		do
		{
			if((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ))
			{
				str=(LPCTSTR)&fd.cFileName;
				if((str!=_T(".")) && (str!=_T("..")))
				{
					m_choose.InsertItem(str,0,1,TreeItem,TVI_SORT);
				}
			}
		}
		while(::FindNextFile(hFind,&fd));
	}
	else
	{
		m_choose.DeleteAllItems();
		MessageBox("路径不对或是设备没准备好!请检查!","Error",MB_OK|MB_OKCANCEL|MB_ICONERROR);
	}
	FindClose(hFind);

}

void CChooseDirDlg::OnSelchangeDirve() 
{
	// TODO: Add your control notification handler code here
	 int iIndex=m_dirve.GetCurSel();
	CString str;
	m_dirve.GetLBText(iIndex,str);
	if(str!=m_Root)
	{
		m_choose.DeleteAllItems();
		m_Root=str;
		m_directory=m_Root+"\\";
		UpdateData(false);
		str+="\\*.*";
		HTREEITEM TreeItem=m_choose.InsertItem(m_Root,0,1,TVI_ROOT,TVI_SORT);
		FindFile(str,TreeItem);
		m_choose.Expand(TreeItem,TVE_EXPAND);
	}
}

void CChooseDirDlg::OnSelchangedChoose(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	CString str,Path,PathName;
	CString strName[20];
	int m_iIndex=0;
	for(int i=0;i<20;i++)
		strName[i]=_T("");
	PathName=_T("");
	Path=_T("");
	m_directory.Empty();
    HTREEITEM ParentTreeItem;
	HTREEITEM TreeItem=m_choose.GetSelectedItem();
	if(!m_choose.Expand(TreeItem,TVE_EXPAND))
	{
      m_Expand=TRUE;
	}
	else
		m_Expand=FALSE;

    //while(TempItem=m_choose.GetNextItem(TreeItem,TVGN_NEXT))
	//	m_choose.DeleteItem(TempItem);

	ParentTreeItem=TreeItem;
	str=m_choose.GetItemText(TreeItem);
	while(str!=m_Root)
	{
		Path=GetParentName(ParentTreeItem);
		ParentTreeItem=m_choose.GetParentItem(ParentTreeItem);
		strName[m_iIndex]=Path;
		if(Path==m_Root)
		{
			for(int i=m_iIndex;i>=0;i--)
			{
				m_directory+=strName[i]+"\\";
				PathName+=strName[i]+"\\";
			}
			PathName+=str;
			m_directory+=str;
			PathName+="\\*.*";
			m_directory+="\\";
			if(m_Expand)
			   FindFile(PathName,TreeItem);
			m_choose.Expand(TreeItem,TVE_EXPAND);
			break;
		}
		m_iIndex++;
	}
		
	if(str==m_Root)
	{
		m_directory=str+"\\";
		str=str+"\\*.*";
		m_choose.Expand(TreeItem,TVE_EXPAND);
	}
	*pResult = 0;
	UpdateData(false);
}

CString CChooseDirDlg::GetParentName(HTREEITEM TreeItem)
{
    HTREEITEM ParentTreeItem;
	ParentTreeItem=m_choose.GetParentItem(TreeItem);
	CString str=m_choose.GetItemText(ParentTreeItem);

	return str;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -