|
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】
|