设为首页 加入收藏

TOP

5.4.4 文件类别(2)
2013-10-07 00:47:45 来源: 作者: 【 】 浏览:42
Tags:5.4.4 文件 类别

5.4.4  文件类别(2)

运行效果如图5-22所示。

 
(点击查看大图)图5-22  UI扩展后运行效果

在CFilesAssistantDlg中增加按钮的处理函数。

FilesAssistantDlg.h中

afx_msg void OnBnClickedButtonAddSameLevel();
afx_msg void OnBnClickedButtonAddChildLevel();
afx_msg void OnBnClickedButtonDeleteLevel();
FilesAssistantDlg.cpp中添加同级类别时要获取选中类别的级别,还应检查在这个级别中是否存在与添加内容同名的项,若存在则取消添加动作。增加一个自定义函数进行判断,该函数定义为CFilesAssistantDlg的成员函数,命名为IsExistInTreeCtrl。
void CFilesAssistantDlg::OnBnClickedButtonAddSameLevel()
{
//添加同级项
UpdateData();
if (m_strFileClassName.IsEmpty())
{
return;
}

//获取选定项
HTREEITEM hItem = m_tcFileClass.GetSelectedItem();

if (NULL == hItem)
{
if(!IsExistInTreeCtrl(m_strFileClassName.GetBuffer(), &m_      tcFileClass, NULL))
{
m_tcFileClass.InsertItem(m_strFileClassName, NULL);
}
}
else
{
if(!IsExistInTreeCtrl(m_strFileClassName.GetBuffer(),
&m_tcFileClass, m_tcFileClass.GetParentItem(hItem)))
{
m_tcFileClass.InsertItem(m_strFileClassName, m_tcFileClass.       GetParentItem(hItem));
}
}
}
///////////////////////////////////////////////////////////////////
//函数名称:IsExistInTreeCtrl
//函数介绍:
//   判定插入的内容是否在tree ctrl的制定级别中已经存在
//输入参数:
//   wchar_t *strInsert:插入的内容
//   CTreeCtrl *pTreeCtrl:指向tree ctrl的指针
//   HTREEITEM hItem:指出控件的级别
//输出参数:
//   无
//返回值:
//   BOOL:若存在返回TRUE,否则返回FALSE
///////////////////////////////////////////////////////////////////
BOOL CFilesAssistantDlg::IsExistInTreeCtrl(wchar_t *strInsert, CTreeCtrl  *pTreeCtrl, HTREEITEM hItem)
{
HTREEITEM hChildItem = pTreeCtrl->GetChildItem(hItem);
while(NULL!=hChildItem)
{
if (0==wcscmp(strInsert, pTreeCtrl->GetItemText(hChildItem)))
{
return TRUE;
}
hChildItem = pTreeCtrl->GetNextSiblingItem(hChildItem);
}
return FALSE;
}

添加子类别时同样也要获得选定项的级别,并且判断该选定项中是否存在与添加内容同名的子项,若存在则取消添加动作。这个判断使用在添加同级项时编写的CFilesAssistantDlg::IsExistInTreeCtrl函数。

void CFilesAssistantDlg::OnBnClickedButtonAddChildLevel()
{
//添加子项
UpdateData();
if (m_strFileClassName.IsEmpty())
{
return;
}
  //获取选定项
HTREEITEM hItem = m_tcFileClass.GetSelectedItem();
  if (NULL == hItem)
{
return;
}
else
{
if(!IsExistInTreeCtrl(m_strFileClassName.
GetBuffer(), &m_      tcFileClass, hItem))
{
m_tcFileClass.InsertItem(m_strFileClassName, hItem);
}
}
m_tcFileClass.Expand(hItem, TVE_EXPAND);
}
删除项时要判断该项是否含有子项,若存在子项则提示用户自行删除该项下存在的所有的子项。
void CFilesAssistantDlg::OnBnClickedButtonDeleteLevel()
{
//删除选定项
HTREEITEM hItem = m_tcFileClass.GetSelectedItem();

if (NULL == hItem)
{
return;
}
else
{
if (m_tcFileClass.ItemHasChildren(hItem))
{
AfxMessageBox(L"请先删除子类型", MB_ICONSTOP);
}
else
{
m_tcFileClass.DeleteItem(hItem);
}
}
}

在确定了文件的类别后在该类别中添加相关的文件路径,注意需要检查该路径是否已经存在于该类别中。增加CfilesAssistantDlg的成员函数,命名为IsExistInListbox。
void CFilesAssistantDlg::OnBnClickedButtonAddFile()
{
//添加类别文件
wchar_t *strFile = new wchar_t[MAX_PATH];
POSITION pos =  m_lcFiles.GetFirstSelectedItemPosition();
while(NULL != pos)
{
wcscpy(strFile, m_strSearchPath);
wcscat(strFile, m_lcFiles.GetItemText(m_lcFiles.
GetNext      Selected Item (pos), 0));
if (!IsExistInListbox(strFile, &m_lbClassifiedFiles))
{
m_lbClassifiedFiles.InsertString(0, strFile);
}
}
delete[] strFile;
}

///////////////////////////////////////////////////////////////////
//函数名称:IsExistInListbox
//函数介绍:
//   判断插入的数据在于listbox中
//输入参数:
//   wchar_t *strInsert:插入的内容
//   CListBox *pListbox:指向listbox的指针
//输出参数:
//   无
//返回值:
//   BOOL:若存在返回TRUE,否则返回FALSE
///////////////////////////////////////////////////////////////////
BOOL CFilesAssistantDlg::IsExistInListbox(wchar_t *strInsert, CListBox  *pListbox)
{
return LB_ERR != pListbox->FindStringExact(0, strInsert);
}

编译并测试程序,可以得到如图5-23所示的结果:
 
(点击查看大图)图5-23  文件类别管理
【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇5.4.2 获取系统文件目录结构(2) 下一篇5.4.4 文件类别(1)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: