105 lines
4.1 KiB
C++
105 lines
4.1 KiB
C++
//#pragma once
|
|
#ifndef IMPORTXMLTREECTRL_ZZG_2009_01_22
|
|
#define IMPORTXMLTREECTRL_ZZG_2009_01_22
|
|
#include "afxcmn.h"
|
|
#include "afxwin.h"
|
|
#include "resource.h"
|
|
#include <deque>
|
|
#include <map>
|
|
#include "XMLDomNode.h"
|
|
#include "XMLDomNodes.h"
|
|
#include "XMLDomFile.h"
|
|
// CImportXMLDocDlg 对话框
|
|
typedef Array<CXMLNodeInfoEx> NodeInfoAry;
|
|
class CImportXMLTreeCtrl : public CTreeCtrl
|
|
{
|
|
public:
|
|
CImportXMLTreeCtrl();
|
|
CImportXMLTreeCtrl(CXMLDOMFile*pXMLDoc);
|
|
//插入新节点及扩展数据
|
|
HTREEITEM InsertItemEx(CXMLNodeInfoEx *pNodeInfo, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);
|
|
//删除新节点及扩展数据
|
|
void DeleteItemEx(HTREEITEM hItem);
|
|
//设置xml文档指针
|
|
void SetXMLDoc(CXMLDOMFile*pXMLDoc);
|
|
//设置当前页面的名字
|
|
void SetCurPageName(const CString& strName);
|
|
//删除所有节点扩展数据
|
|
void DeleteAllItemData(HTREEITEM hItem = TVI_ROOT);
|
|
//初始化树
|
|
void InitTree();
|
|
//设置节点状态 仅对有checkbox的treectrl起作用
|
|
BOOL SetItemState( HTREEITEM hItem, UINT nState, UINT nStateMask, BOOL bSearch=TRUE);
|
|
//把所有被选择的tree节点凡是名字为“选项”的节点扩展数据存入tree的 一个map成员变量中
|
|
void GetCheckedItemData(HTREEITEM hItem);
|
|
//把扩展数据中的路径信息改成字符串数组 根据“/”分割
|
|
void GetListCtrlIndex(const CXMLNodeInfoEx &data,CStringArray &arystr);
|
|
//展开指定节点(暂时没写函数体)代码在inittree()的最后
|
|
void ExpandItem(HTREEITEM hItem);//展开指定节点
|
|
protected:
|
|
afx_msg void OnDestroy(){GetCheckedItemData(GetRootItem());DeleteAllItemData();CTreeCtrl::OnDestroy();}//ok
|
|
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
|
afx_msg void OnStateIconClick(NMHDR* pNMHDR, LRESULT* pResult);
|
|
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
DECLARE_MESSAGE_MAP()
|
|
//广度遍历tree形成界面tree
|
|
void BreadthXmlNodeToTreeNode(const CXMLDOMNodePtr &pXmlNode);
|
|
//是否有子节点
|
|
BOOL IsHasChildNodes(const MSXML2::IXMLDOMNodePtr &pIXMLDOMNodePtr);
|
|
//得到xml节点tag名字
|
|
CString GetXMLNodeName(const MSXML2::IXMLDOMNodePtr &pIXMLDOMNodePtr);
|
|
//得到xml节点属性名字
|
|
CString GetXMLNodeAttributeName(const MSXML2::IXMLDOMNodePtr &pIXMLDOMNodePtr,int nIndex=0);
|
|
//得到xml节点属性值
|
|
CString GetXMLNodeAttributeValue(const MSXML2::IXMLDOMNodePtr &pIXMLDOMNodePtr,const CString strNodeAttriName);
|
|
//得到xml节点值(仅对叶子节点)
|
|
CString GetXMLNodeValue(const MSXML2::IXMLDOMNodePtr &pIXMLDOMNodePtr);
|
|
//得到当前xml节点属性数量
|
|
long GetXMLNodeAttriNum(const MSXML2::IXMLDOMNodePtr &pIXMLDOMNodePtr);
|
|
public:
|
|
std::map<CString,NodeInfoAry> m_mapData;//对应对话框的数据
|
|
private:
|
|
CXMLDOMFile* m_pXMLDoc;//xml文档指针
|
|
CImageList m_imageList;//图标(目录 和选项)
|
|
CImageList m_imageState;//状态图标仅对有checkbox起作用
|
|
UINT m_uFlags;//状态风格(对有checkbox起作用)
|
|
HTREEITEM m_hItem;// 当前页面对应的树节点
|
|
CString m_strPageName;//对应的对话框页面的名字 根据此名字 直接购选此名字对应的tree节点
|
|
//遍历兄弟及父节点设置节点状态
|
|
void TravelSiblingAndParent(HTREEITEM hItem, int nState);
|
|
//遍历子节点设置节点状态
|
|
void TravelChild(HTREEITEM hItem,int nState);
|
|
//得到xml指针指向的节点信息
|
|
CXMLNodeInfoEx GetNodeInfoEx(const MSXML2::IXMLDOMNodePtr &pIXMLDOMNodePtr);//得到xml节点的信息(包含多属性)
|
|
};
|
|
|
|
class CImportXMLDocDlg : public CModelessDialog
|
|
{
|
|
DECLARE_DYNAMIC(CImportXMLDocDlg)
|
|
|
|
public:
|
|
CImportXMLDocDlg(CWnd* pParent = NULL); // 标准构造函数
|
|
CImportXMLDocDlg(CXMLDOMFile *pXMLDoc,CString strPageName,int nFlag = 0,CWnd* pParent = NULL); // 标准构造函数
|
|
virtual ~CImportXMLDocDlg();
|
|
|
|
// 对话框数据
|
|
enum { IDD = IDD_IMPORTDLG };
|
|
public:
|
|
void InitTree();//初始化树
|
|
CXMLNodeInfo GetCurXmlNodeInfo(){return m_selNodeInfo;}//返回 选中树节点的信息
|
|
protected:
|
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
|
virtual BOOL OnInitDialog();
|
|
DECLARE_MESSAGE_MAP()
|
|
public:
|
|
CImportXMLTreeCtrl m_treeXmlDoc;//xml界面tree
|
|
//CListBox m_listProperty;//属性列表
|
|
CString m_strFilePath;//xml文档路径
|
|
private:
|
|
CXMLDOMFile *m_pXMLDoc;//xml文档指针
|
|
CXMLNodeInfo m_selNodeInfo;//树上选中节点的信息
|
|
afx_msg void OnTvnSelchangedImportxmldoctree(NMHDR *pNMHDR, LRESULT *pResult);
|
|
CString m_strPageName;//当前属性页的名字 根据此名字 直接购选此名字对应的tree节点
|
|
int m_nFlag;// 对话框风格
|
|
};
|
|
#endif |