Files
envi-code/SourceCode/Code2026/tg_shs/shs_kerncmd/ImportXMLDocDlg.h
T

105 lines
4.5 KiB
C++
Raw Normal View History

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