上一篇中Ftp客户端是基于Dialog,这里使用SDI基于CListView类。
其ui如下所示:
一、浮动对话框
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(
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 //会话指定为被动或主动,默认为主动模式
);
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 //新插入项的位置,默认最后
);
效果图如下: