XML_TestDlg.cpp
上传用户:phsoso
上传日期:2014-03-02
资源大小:165k
文件大小:6k
源码类别:

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. ON_BN_CLICKED(IDOK, OnBnClickedOk)
  58. ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2)
  59. END_MESSAGE_MAP()
  60. // CXML_TestDlg 消息处理程序
  61. BOOL CXML_TestDlg::OnInitDialog()
  62. {
  63. CDialog::OnInitDialog();
  64. // 将“关于...”菜单项添加到系统菜单中。
  65. // IDM_ABOUTBOX 必须在系统命令范围内。
  66. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  67. ASSERT(IDM_ABOUTBOX < 0xF000);
  68. CMenu* pSysMenu = GetSystemMenu(FALSE);
  69. if (pSysMenu != NULL)
  70. {
  71. CString strAboutMenu;
  72. strAboutMenu.LoadString(IDS_ABOUTBOX);
  73. if (!strAboutMenu.IsEmpty())
  74. {
  75. pSysMenu->AppendMenu(MF_SEPARATOR);
  76. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  77. }
  78. }
  79. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  80. //  执行此操作
  81. SetIcon(m_hIcon, TRUE); // 设置大图标
  82. SetIcon(m_hIcon, FALSE); // 设置小图标
  83. // TODO: 在此添加额外的初始化代码
  84. ::OleInitialize(NULL);
  85.     
  86. HRESULT hr = m_plDomDocument.CreateInstance(MSXML::CLSID_DOMDocument);
  87. if(FAILED(hr))
  88. {
  89. _com_error er(hr);
  90. AfxMessageBox(er.ErrorMessage());
  91. EndDialog(1);
  92. }
  93. return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE
  94. }
  95. void CXML_TestDlg::OnSysCommand(UINT nID, LPARAM lParam)
  96. {
  97. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  98. {
  99. CAboutDlg dlgAbout;
  100. dlgAbout.DoModal();
  101. }
  102. else
  103. {
  104. CDialog::OnSysCommand(nID, lParam);
  105. }
  106. }
  107. // 如果向对话框添加最小化按钮,则需要下面的代码
  108. //  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
  109. //  这将由框架自动完成。
  110. void CXML_TestDlg::OnPaint() 
  111. {
  112. if (IsIconic())
  113. {
  114. CPaintDC dc(this); // 用于绘制的设备上下文
  115. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  116. // 使图标在工作矩形中居中
  117. int cxIcon = GetSystemMetrics(SM_CXICON);
  118. int cyIcon = GetSystemMetrics(SM_CYICON);
  119. CRect rect;
  120. GetClientRect(&rect);
  121. int x = (rect.Width() - cxIcon + 1) / 2;
  122. int y = (rect.Height() - cyIcon + 1) / 2;
  123. // 绘制图标
  124. dc.DrawIcon(x, y, m_hIcon);
  125. }
  126. else
  127. {
  128. CDialog::OnPaint();
  129. }
  130. }
  131. //当用户拖动最小化窗口时系统调用此函数取得光标显示。
  132. HCURSOR CXML_TestDlg::OnQueryDragIcon()
  133. {
  134. return static_cast<HCURSOR>(m_hIcon);
  135. }
  136. void CXML_TestDlg::OnBnClickedButton1()
  137. {
  138. CFileDialog fileDlg(TRUE);
  139. if(IDOK == fileDlg.DoModal())
  140. {
  141. m_strDocName = fileDlg.GetPathName();
  142. m_strDocContents = "Empty Document";
  143. m_TreeContents.DeleteAllItems();
  144. UpdateData(FALSE);
  145. CString strFileName(m_strDocName);
  146. _bstr_t bstrFileName;
  147. bstrFileName = strFileName.AllocSysString();
  148. variant_t vResult;
  149. vResult = m_plDomDocument->load(bstrFileName);
  150. if(((bool)vResult) == TRUE)
  151. {
  152. _bstr_t bstrDocContents = m_plDomDocument->xml;
  153. m_strDocContents = (LPCTSTR)bstrDocContents;
  154. m_pDocRoot = m_plDomDocument->documentElement;
  155. DisplayChildren(TVI_ROOT, m_pDocRoot);
  156. if(m_TreeContents.GetCount() == 0)
  157. m_TreeContents.InsertItem("Empty Document");
  158. }
  159. else
  160. {
  161. m_strDocContents = "Document FAILED to load!";
  162. m_TreeContents.InsertItem("Document FAILED to load!");
  163. }
  164. UpdateData(FALSE);
  165. }
  166. }
  167. void CXML_TestDlg::OnBnClickedCheck1()
  168. {
  169. UpdateData(TRUE);
  170. if(m_bTreeView)
  171. {
  172. GetDlgItem(IDC_EDT_DOC_CONTENTS)->ShowWindow(SW_HIDE);
  173. m_TreeContents.ShowWindow(SW_SHOW);
  174. }
  175. else
  176. {
  177. m_TreeContents.ShowWindow(SW_HIDE);
  178. GetDlgItem(IDC_EDT_DOC_CONTENTS)->ShowWindow(SW_SHOW);
  179. }
  180. }
  181. void CXML_TestDlg::DisplayChildren(HTREEITEM hParent, MSXML::IXMLDOMNodePtr pParent)
  182. {
  183. HTREEITEM hItem = DisplayChild(hParent, pParent);
  184. for(MSXML::IXMLDOMNodePtr pChild = pParent->firstChild;
  185. pChild != NULL;
  186. pChild = pChild->nextSibling)
  187. DisplayChildren(hItem, pChild);
  188. }
  189. HTREEITEM CXML_TestDlg::DisplayChild(HTREEITEM hParent, MSXML::IXMLDOMNodePtr pChild)
  190. {
  191. CString strElement;
  192. if(MSXML::NODE_TEXT == pChild->nodeType)
  193. strElement = (LPCTSTR)pChild->text;
  194. else
  195. strElement = (LPCTSTR)pChild->nodeName;
  196. return m_TreeContents.InsertItem(strElement, hParent);
  197. }
  198. void CXML_TestDlg::OnBnClickedOk()
  199. {
  200. // TODO: 在此添加控件通知处理程序代码
  201. OnOK();
  202. }
  203. void CXML_TestDlg::OnBnClickedButton2()
  204. {
  205. // TODO: 在此添加控件通知处理程序代码
  206. CFileDialog fileDlg(true);
  207. if(fileDlg.DoModal())
  208. {
  209. this->m_strDocName = fileDlg.GetPathName();
  210. this->m_strDocContents = "空文档!";
  211. this->m_TreeContents.DeleteAllItems();
  212. this->UpdateData(false);
  213. _bstr_t bstrFileName = m_strDocName.AllocSysString();
  214. if(((bool)m_plDomDocument->load(bstrFileName)==true))
  215. {
  216. _bstr_t bstrDocContents = this->m_plDomDocument->xml;
  217. this->m_strDocContents = (LPCTSTR)bstrDocContents;
  218. }
  219. this->UpdateData(false);
  220. }
  221. }