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

📄 choosdir.cpp

📁 简单的ftp客户端下载程序
💻 CPP
字号:
// MiniFTP copyright 1997 Paul Gerhart pgerhart@voicenet.com
// ChoosDir.cpp : implementation file

#include "stdafx.h"
#include "miniftp.h"  // the app's .h file
#include <direct.h>
#include <dlgs.h>
#include "ChoosDir.h"

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

/////////////////////////////////////////////////////////////////////////////
// CChooseDir

IMPLEMENT_DYNAMIC(CChooseDir, CFileDialog)

CChooseDir::CChooseDir(BOOL bOpenFileDialog, LPCTSTR lpszDefExt,
                        LPCTSTR lpszFileName, DWORD dwFlags, LPCTSTR lpszFilter, 
                        CWnd* pParentWnd) :
                        CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, 
                        dwFlags |= OFN_ENABLETEMPLATE, lpszFilter, pParentWnd)
{
    m_ofn.hInstance = AfxGetResourceHandle();
    m_ofn.lpTemplateName = MAKEINTRESOURCE(CChooseDir::IDD);

    m_ofn.Flags &= ~OFN_EXPLORER;           // Lose this for VC1.52c

    //{{AFX_DATA_INIT(CChooseDir)
	//}}AFX_DATA_INIT
}

void CChooseDir::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CChooseDir)
    DDX_Control(pDX, IDC_DIRNAME, m_CtrlDirName);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CChooseDir, CFileDialog)
    //{{AFX_MSG_MAP(CChooseDir)
    ON_WM_PAINT()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
BOOL CChooseDir::OnInitDialog() 
{
	CString sTemp;

	CenterWindow();

	GetDlgItem(stc2)->ShowWindow(SW_HIDE);
	GetDlgItem(stc3)->ShowWindow(SW_HIDE);
	GetDlgItem(edt1)->ShowWindow(SW_HIDE);
	GetDlgItem(lst1)->ShowWindow(SW_HIDE);
	GetDlgItem(cmb1)->ShowWindow(SW_HIDE);
	GetDlgItem(stc1)->ShowWindow(SW_HIDE);
	GetDlgItem(chx1)->ShowWindow(SW_HIDE);  // Read only... don't have to hide this one
											// could rely onOFN_HIDEREADONLY

	GetDlgItem(psh15)->EnableWindow(FALSE); // I disable the help button

	SetDlgItemText(edt1, "Junk");

	// Need to fill in my edit control (IDC_DIRNAME)
        
    CListBox* pList = (CListBox*)GetDlgItem(lst2);
    int iIndex = pList->GetCurSel();

    m_sDirName.Empty();
    
    if (iIndex != LB_ERR)
	{
        pList->GetText(iIndex, sTemp);

        for (int i = 0; i <= iIndex; i++)
        {
			pList->GetText(i, sTemp);

			if (i > 1)
			{
				m_sDirName += "\\";
				m_sDirName += sTemp;
			}
			else
			{
				m_sDirName += sTemp;
			}
		}
		// I commented this out
        //m_sDirName.MakeUpper();      
		((CEdit*)GetDlgItem(IDC_DIRNAME))->SetWindowText(m_sDirName);
	}

    GetDlgItem(lst2)->SetFocus();
    m_bDlgJustCameUp = TRUE;
    CFileDialog::OnInitDialog();
    
    return FALSE;  // return TRUE unless you set the focus to acontrol
                  // EXCEPTION: OCX Property Pages should returnFALSE
}

/////////////////////////////////////////////////////////////////////////////
void CChooseDir::OnPaint() 
{
    CPaintDC dc(this); // device context for painting
    
    if (m_bDlgJustCameUp)
    {
		m_bDlgJustCameUp = FALSE;
		SendDlgItemMessage(lst2, LB_SETCURSEL, 0, 0L);
    }
    
    // Do not call CFileDialog::OnPaint() for painting messages
}

/////////////////////////////////////////////////////////////////////////////
void CChooseDir::OnLBSelChangedNotify(UINT nIDBox, UINT iCurSel, UINT nCode)
{
    CString sTemp;
    int i;

    CListBox* pList = (CListBox*)GetDlgItem(lst2);
    int iIndex = pList->GetCurSel();
    m_sDirName.Empty();
    
    if (iIndex != LB_ERR)
    {
		pList->GetText(iIndex, sTemp);

		for (i = 0; i <= iIndex; i++)
		{
			pList->GetText(i, sTemp);

			if (i > 1)
			{
				m_sDirName += "\\";
				m_sDirName += sTemp;
			}
			else
			{
				m_sDirName += sTemp;
			}
		}
    	((CEdit*)GetDlgItem(IDC_DIRNAME))->SetWindowText(m_sDirName);
    }
}

/////////////////////////////////////////////////////////////////////////////
BOOL CChooseDir::OnFileNameOK(void)
{
    CString sDrive;
    CString sMessage;
    int iResult;

    m_CtrlDirName.GetWindowText(m_sDirName);
    sDrive = m_sDirName.Left(3);

    // I do a basic check for Win3.11 DOS file name compatibility
    // This is set up for Win.311.
	//			To set it for Win95 change it to:
     iResult = m_sDirName.FindOneOf("*?|/<>\"");         // Win95        

    //iResult = m_sDirName.FindOneOf("*?|/<> .[]^+\"");      // Win 3.11

    if (iResult >= 0)
    {
		sMessage.Format("%s is not a valid pathname.", m_sDirName);
		AfxMessageBox(sMessage, MB_OK);
		return TRUE;
    }

	if (_chdir(m_sDirName))
    {
    sMessage.Format("Directory %s does not exist.\nCreate this directory?", 
						m_sDirName);
    iResult = AfxMessageBox(sMessage, MB_YESNO);

    if (iResult == IDYES)
    {
		// Create the new directory:
    
		iResult = _mkdir(m_sDirName);
		if (iResult)
		{
			sMessage.Format("There was a problem creating %s.\n"
				"The new directory was not created.", m_sDirName);
			AfxMessageBox(sMessage, MB_OK);
			return TRUE;
		}
    }
    else
	{
		return TRUE;
	}

    char szBuffer[MAX_PATH];
    sMessage = m_sDirName + "\\" + m_ofn.lpstrFileTitle;
    strcpy (szBuffer, (const char *)sMessage);
    strcpy(m_ofn.lpstrFile, szBuffer);

    m_pofnTemp->nFileOffset = m_sDirName.GetLength() + 1; // For 32bit
    m_pofnTemp->nFileExtension = sMessage.GetLength();     //For 32bit

    // For VC 1.52c change m_pofnTemp-> to m_ofn. in the above 2 lines:

    // m_ofn.nFileOffset = m_sDirName.GetLength() + 1;     // For 16bit
    // m_ofn.nFileExtension = szMessage.GetLength();        // For 16bit

    }
	return FALSE;
}

⌨️ 快捷键说明

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