FTP客户端(改进)

上一篇中Ftp客户端是基于Dialog,这里使用SDI基于CListView类。

其ui如下所示:

FTP客户端(改进)_第1张图片


一、浮动对话框

Style设置为Child,Border设置为None。


用到如下几个函数:

CDialogBar::Create

virtual BOOL Create(
	CWnd* pParentWnd,          //指向装载浮动对话框父窗口指针
	UINT nIDTemplate,          //对话框资源ID
	UINT nStyle,               //对话框在框架窗口的位置
	UINT nID                   //对话框控件ID
	);


EnableDocking()

DockControlBar()  框架指定浮动对话框停靠


二、客户区的分割

分为三个区,即三个视图CMsgShow, CFileTree,CFtpTreeView,分别基于类CEditview,CTreeView,CListView


用到如下几个函数:

virtual BOOL CreateStatic

virtual BOOL CreateStatic(
	CWnd* pParentWnd,                      //分割窗口的父框架窗口
	int nRows,                             //分割行
	int nCols,                             //分割列
	DWORD dwStyle = WS_CHILD | WS_VISIBLE, //指定窗口样式
	UINT nID = AFX_IDW_PANE_FIRST          //子窗口的ID
	);


virtual BOOL CreateView

virtual BOOL CreateView(
	int row,  
	int col,
	CRuntimeClass* pViewClass,  //指定一个CRuntimeClass作为新视图
	SIZE sizeInit,              //指定新视图的初始大小
	CCreateContext* pContext    //为用来创建上下文的指针创建视图
	);

SetRowInfo()


SetColumnInfo()


三、客户端的连接

通过调用WinInet API来实现,用到两个类:CInternetSession和CFtpConnection

CInternetSession(
	LPCTSTR pstrAgent = NULL,                           
	DWORD_PTR dwContext = 1,
	DWORD dwAccessType = PRE_CONFIG_INTERNET_ACCESS,
	LPCTSTR pstrProxyName = NULL,
	LPCTSTR pstrProxyBypass = NULL,
	DWORD dwFlags = 0 
	);

CFtpConnection* GetFtpConnection(
	LPCTSTR pstrServer,                  //包含FTP服务器IP地址的字符串
	LPCTSTR pstrUserName = NULL,         //用户名字符串,若为NULL,则为默认匿名登录
	LPCTSTR pstrPassword = NULL,         //密码字符串
	INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER, //服务器的端口号,对FTP默认为21
	BOOL bPassive = FALSE                //会话指定为被动或主动,默认为主动模式
	);


PutFile()

BOOL PutFile(
	LPCTSTR pstrLocalFile,                    //上传文件的路径字符串
	LPCTSTR pstrRemoteFile,                   //保存在FTP服务器上文件路径
	DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY, //指定文件的传输模式
	DWORD_PTR dwContext = 1                   //文件的标识符
	); 

GetFile()

BOOL GetFile(
	LPCTSTR pstrRemoteFile,                 //FTP服务器上文件路径
	LPCTSTR pstrLocalFile,                  //本地创建的文件路径
	BOOL bFailIfExists = TRUE,              //当下载路径上有同名文件时,是否会导致下载失败
	DWORD dwAttributes = FILE_ATTRIBUTE_NORMAL, //文件属性
	DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY,   //调用时的条件
	DWORD_PTR dwContext = 1                     //文件检索上下文标识
	);


四、遍历本地文件夹资源

调用CFileFind类

InsertItem()

HTREEITEM InsertItem(
	LPCTSTR lpszItem,     //插入项的文本指针
	int nImage,           //插入项未被选中时的图标索引
	int nSelectedImage,   //插入项被选中时的图标索引
	HTREEITEM hParent = TVI_ROOT, //父节点项的句柄,默认为根节点
	HTREEITEM hInsertAfter = TVI_LAST //新插入项的位置,默认最后
	);

效果图如下:

FTP客户端(改进)_第2张图片

源代码


你可能感兴趣的:(FTP客户端(改进))