📄 choosedirdlg.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 + -