上一篇中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 //为用来创建上下文的指针创建视图 );
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 //文件的标识符 );
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 //新插入项的位置,默认最后 );
源代码