void CEasyDownLoadDlg::OnBtnDownLoad() 

// TODO: Add your control notification handler code here 
CString m_PathName; CFileDialog    dlg( FALSE, _T("*.*"), NULL, 
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
_T("All Files (*.*)|*.*||"), 
NULL ); //弹出保存对话框, if ( dlg.DoModal() != IDOK) 
        return ; m_PathName = dlg.GetPathName(); 
//下载环节 
CInternetSession    is; 
CStdioFile        *psf; 
UpdateData(); 
psf = is.OpenURL( m_Add, 1, INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD); 
CFile    file(m_PathName, 
CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);//建立本地文件     char    buf[READ_BYTE_SIZE]; 
    int    readbyte; 
    while(1) 

readbyte = psf->Read( buf, READ_BYTE_SIZE);//每次下载READ_BYTE_SIZE字节数据 
        if ( !readbyte) 
            break; 
file.Write( buf, readbyte); //把下载的数据写入到文件中 
} psf->Close(); 
file.Close(); 
delete psf; 
AfxMessageBox("下载结束"); } 
1,这样写,好像只能实现http下载,不能ftp下载,ftp下载怎么办? 
2,如何实现进度,即时速度. 
3,这样下载应该是先把文件下载到内存,然后移到硬盘吧,那要是文件很大怎么办? 
4,这样下载的时候,程序是卡死状态的,按钮都不显示了,应该创建新线程下载吧,要怎么做? 大侠们,能回答几个就回答几个吧,谢谢. 
要是源码更好,给个下载链接也行csdn上有吗?