XML_TestDlg.cpp
上传用户:testhan
上传日期:2013-10-13
资源大小:49k
文件大小:5k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. // XML_TestDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "XML_Test.h"
  5. #include "XML_TestDlg.h"
  6. #include "msxml.h"
  7. #include ".xml_testdlg.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #endif
  11. // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
  12. class CAboutDlg : public CDialog
  13. {
  14. public:
  15. CAboutDlg();
  16. // 对话框数据
  17. enum { IDD = IDD_ABOUTBOX };
  18. protected:
  19. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
  20. // 实现
  21. protected:
  22. DECLARE_MESSAGE_MAP()
  23. };
  24. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  25. {
  26. }
  27. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  28. {
  29. CDialog::DoDataExchange(pDX);
  30. }
  31. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  32. END_MESSAGE_MAP()
  33. // CXML_TestDlg 对话框
  34. CXML_TestDlg::CXML_TestDlg(CWnd* pParent /*=NULL*/)
  35. : CDialog(CXML_TestDlg::IDD, pParent)
  36. , m_strDocName(_T(""))
  37. , m_strDocContents(_T(""))
  38. , m_bTreeView(FALSE)
  39. {
  40. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  41. }
  42. void CXML_TestDlg::DoDataExchange(CDataExchange* pDX)
  43. {
  44. CDialog::DoDataExchange(pDX);
  45. DDX_Text(pDX, IDC_STC_DOC_NAME, m_strDocName);
  46. DDX_Text(pDX, IDC_EDT_DOC_CONTENTS, m_strDocContents);
  47. DDX_Check(pDX, IDC_CHECK1, m_bTreeView);
  48. DDX_Control(pDX, IDC_TREE_CONTENTS, m_TreeContents);
  49. }
  50. BEGIN_MESSAGE_MAP(CXML_TestDlg, CDialog)
  51. ON_WM_SYSCOMMAND()
  52. ON_WM_PAINT()
  53. ON_WM_QUERYDRAGICON()
  54. //}}AFX_MSG_MAP
  55. ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
  56. ON_BN_CLICKED(IDC_CHECK1, OnBnClickedCheck1)
  57. END_MESSAGE_MAP()
  58. // CXML_TestDlg 消息处理程序
  59. BOOL CXML_TestDlg::OnInitDialog()
  60. {
  61. CDialog::OnInitDialog();
  62. // 将“关于...”菜单项添加到系统菜单中。
  63. // IDM_ABOUTBOX 必须在系统命令范围内。
  64. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  65. ASSERT(IDM_ABOUTBOX < 0xF000);
  66. CMenu* pSysMenu = GetSystemMenu(FALSE);
  67. if (pSysMenu != NULL)
  68. {
  69. CString strAboutMenu;
  70. strAboutMenu.LoadString(IDS_ABOUTBOX);
  71. if (!strAboutMenu.IsEmpty())
  72. {
  73. pSysMenu->AppendMenu(MF_SEPARATOR);
  74. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  75. }
  76. }
  77. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  78. //  执行此操作
  79. SetIcon(m_hIcon, TRUE); // 设置大图标
  80. SetIcon(m_hIcon, FALSE); // 设置小图标
  81. // TODO: 在此添加额外的初始化代码
  82. ::OleInitialize(NULL);
  83.     
  84. HRESULT hr = m_plDomDocument.CreateInstance(MSXML::CLSID_DOMDocument);
  85. if(FAILED(hr))
  86. {
  87. _com_error er(hr);
  88. AfxMessageBox(er.ErrorMessage());
  89. EndDialog(1);
  90. }
  91. return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE
  92. }
  93. void CXML_TestDlg::OnSysCommand(UINT nID, LPARAM lParam)
  94. {
  95. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  96. {
  97. CAboutDlg dlgAbout;
  98. dlgAbout.DoModal();
  99. }
  100. else
  101. {
  102. CDialog::OnSysCommand(nID, lParam);
  103. }
  104. }
  105. // 如果向对话框添加最小化按钮,则需要下面的代码
  106. //  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
  107. //  这将由框架自动完成。
  108. void CXML_TestDlg::OnPaint() 
  109. {
  110. if (IsIconic())
  111. {
  112. CPaintDC dc(this); // 用于绘制的设备上下文
  113. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  114. // 使图标在工作矩形中居中
  115. int cxIcon = GetSystemMetrics(SM_CXICON);
  116. int cyIcon = GetSystemMetrics(SM_CYICON);
  117. CRect rect;
  118. GetClientRect(&rect);
  119. int x = (rect.Width() - cxIcon + 1) / 2;
  120. int y = (rect.Height() - cyIcon + 1) / 2;
  121. // 绘制图标
  122. dc.DrawIcon(x, y, m_hIcon);
  123. }
  124. else
  125. {
  126. CDialog::OnPaint();
  127. }
  128. }
  129. //当用户拖动最小化窗口时系统调用此函数取得光标显示。
  130. HCURSOR CXML_TestDlg::OnQueryDragIcon()
  131. {
  132. return static_cast<HCURSOR>(m_hIcon);
  133. }
  134. void CXML_TestDlg::OnBnClickedButton1()
  135. {
  136. CFileDialog fileDlg(TRUE);
  137. if(IDOK == fileDlg.DoModal())
  138. {
  139. m_strDocName = fileDlg.GetPathName();
  140. m_strDocContents = "Empty Document";
  141. m_TreeContents.DeleteAllItems();
  142. UpdateData(FALSE);
  143. CString strFileName(m_strDocName);
  144. _bstr_t bstrFileName;
  145. bstrFileName = strFileName.AllocSysString();
  146. variant_t vResult;
  147. vResult = m_plDomDocument->load(bstrFileName);
  148. if(((bool)vResult) == TRUE)
  149. {
  150. _bstr_t bstrDocContents = m_plDomDocument->xml;
  151. m_strDocContents = (LPCTSTR)bstrDocContents;
  152. m_pDocRoot = m_plDomDocument->documentElement;
  153. DisplayChildren(TVI_ROOT, m_pDocRoot);
  154. if(m_TreeContents.GetCount() == 0)
  155. m_TreeContents.InsertItem("Empty Document");
  156. }
  157. else
  158. {
  159. m_strDocContents = "Document FAILED to load!";
  160. m_TreeContents.InsertItem("Document FAILED to load!");
  161. }
  162. UpdateData(FALSE);
  163. }
  164. }
  165. void CXML_TestDlg::OnBnClickedCheck1()
  166. {
  167. UpdateData(TRUE);
  168. if(m_bTreeView)
  169. {
  170. GetDlgItem(IDC_EDT_DOC_CONTENTS)->ShowWindow(SW_HIDE);
  171. m_TreeContents.ShowWindow(SW_SHOW);
  172. }
  173. else
  174. {
  175. m_TreeContents.ShowWindow(SW_HIDE);
  176. GetDlgItem(IDC_EDT_DOC_CONTENTS)->ShowWindow(SW_SHOW);
  177. }
  178. }
  179. void CXML_TestDlg::DisplayChildren(HTREEITEM hParent, MSXML::IXMLDOMNodePtr pParent)
  180. {
  181. HTREEITEM hItem = DisplayChild(hParent, pParent);
  182. for(MSXML::IXMLDOMNodePtr pChild = pParent->firstChild;
  183. pChild != NULL;
  184. pChild = pChild->nextSibling)
  185. DisplayChildren(hItem, pChild);
  186. }
  187. HTREEITEM CXML_TestDlg::DisplayChild(HTREEITEM hParent, MSXML::IXMLDOMNodePtr pChild)
  188. {
  189. CString strElement;
  190. if(MSXML::NODE_TEXT == pChild->nodeType)
  191. strElement = (LPCTSTR)pChild->text;
  192. else
  193. strElement = (LPCTSTR)pChild->nodeName;
  194. return m_TreeContents.InsertItem(strElement, hParent);
  195. }