Files
envi-code/SourceCode/Code2026/tg_shs/shs_kerncmd/ImportXMLDocDlg.h
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

105 lines
4.5 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