QQ登录

只需一步,快速开始

191上位机VC MFC利用XML文件读取保存参数文件

[ 复制链接 ]

191上位机VC MFC利用XML文件读取保存参数文件

191上位机VC MFC利用XML文件读取保存参数文件
191上位机VC MFC利用XML文件读取保存参数文件
功能展示
XML文件可以自定义标签,很多应用程序都会用这类型文件来保存配置或程序参数,我们当前例程通过软件提供的接口函数实现从XML文件读取数据与保存参数功能,点击保存数据到XML会将列表框的内容保存到XML文件中,在程序初始化时会从XML加载数据到程序,效果如图;
要点提示
XML文件接口函数使用前得添加其所在的头文件及动态库,既添加几行代码#import "msxml6.dll"
#define MSXML  MSXML2 ,using namespace MSXML2;,还得初始化接口函数才能正常调用函数;CoInitialize(NULL);
实现功能
1.新建基于对话框的应用程序
2.拖拽三编辑框ID为IDC_EDIT1,IDC_EDIT2,IDC_EDIT3,及按钮<添加到列表框>用于向列表框输入内容,添加按钮<保存列表框数据到XML>用于保存列表框内容到XML文件;
3.添加  变量CString m_sXMLFilePath;//XML文件路径
及两自定义函数voidReadXMLData();//从XML文件读取数据到列表框
  void SaveXMLData();//保存数据到XML文件
在主对话框的OnInitDialog()初始化
  1. CListCtrl *pList = (CListCtrl *)GetDlgItem(IDC_LIST1);
  2.         pList->SetExtendedStyle(LVS_EX_FLATSB | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
  3.         pList->ModifyStyle(0,LVS_REPORT,0);
  4.         pList->InsertColumn(0,"网站名");
  5.         pList->SetColumnWidth(0,100);
  6.         pList->InsertColumn(1,"网址");
  7.         pList->SetColumnWidth(1,100);
  8.         pList->InsertColumn(2,"网站类型");
  9.         pList->SetColumnWidth(2,150);
  10.         //<>
  11.         CHAR buf[MAX_PATH];
  12.         GetModuleFileName(NULL,buf,MAX_PATH);
  13.         m_sXMLFilePath=buf;
  14.         m_sXMLFilePath = m_sXMLFilePath.Left(m_sXMLFilePath.ReverseFind('\\')+1)+"工控编程吧.XML";
  15.         CoInitialize(NULL);//初始化接口函数
  16.         if(_access(m_sXMLFilePath,0)!=-1)
  17.                 ReadXMLData();//读取数据到列表框
复制代码
  1. 其他函数代码为
  2. void CGkbc8Dlg::SaveXMLData()
  3. {
  4.         CListCtrl *pList = (CListCtrl *)GetDlgItem(IDC_LIST1);
  5.         MSXML::IXMLDOMDocumentPtr xdoc;
  6.         xdoc.CreateInstance(__uuidof(MSXML::DOMDocument));
  7.         MSXML::IXMLDOMElementPtr Root = xdoc->createElement("XMLList");
  8.         MSXML::IXMLDOMElementPtr Row;
  9.         MSXML::IXMLDOMElementPtr Col;
  10.         xdoc->appendChild(Root);
  11.         for (int i = 0 ; i < pList->GetItemCount()  ; i++)
  12.         {
  13.                 Row = xdoc->createElement("Row");
  14.                 Root->appendChild(Row);
  15.                 for (int j = 0 ; j < pList->GetHeaderCtrl()->GetItemCount() ;j++)
  16.                 {
  17.                         LVCOLUMN column;
  18.                         column.mask = LVCF_TEXT;
  19.                         column.cchTextMax = 255;
  20.                         char str[255];
  21.                         column.pszText = str;
  22.                         pList->GetColumn(j,&column);

  23.                         Col = xdoc->createElement(column.pszText);
  24.                         Row->appendChild(Col);
  25.                         CString values;
  26.                         values = pList->GetItemText(i,j);
  27.                         Col->appendChild(xdoc->createTextNode((_bstr_t)values));
  28.                 }
  29.         }
  30.         xdoc->save((_bstr_t)m_sXMLFilePath);
  31. }
  32. void CGkbc8Dlg::OnAdd()
  33. {
  34.         CListCtrl *pList = (CListCtrl *)GetDlgItem(IDC_LIST1);
  35.         CString sNetSite,sNetAddr,sNetStyle;
  36.         GetDlgItemText(IDC_EDIT1,sNetSite);
  37.         GetDlgItemText(IDC_EDIT2,sNetAddr);
  38.         GetDlgItemText(IDC_EDIT3,sNetStyle);
  39.         
复制代码
  1. int index = pList->InsertItem(pList->GetItemCount(),sNetSite);        
  2.         pList->SetItemText(index,1,sNetAddr);
  3.         pList->SetItemText(index,2,sNetStyle);        
  4. }
  5. void CGkbc8Dlg::OnSave() SaveXMLData();}
  6. void CGkbc8Dlg::ReadXMLData()
  7. {
  8.         CListCtrl *pList = (CListCtrl *)GetDlgItem(IDC_LIST1);
  9.         MSXML::IXMLDOMDocumentPtr xdoc;
  10.         xdoc.CreateInstance(__uuidof(MSXML::DOMDocument));
  11.         xdoc->load((_bstr_t)m_sXMLFilePath);
  12.         IXMLDOMNodeListPtr nodelist=NULL;
  13.         IXMLDOMNodeListPtr rows=NULL;
  14.         IXMLDOMNodeListPtr cols=NULL;
  15.         nodelist=xdoc->selectNodes("XMLList");
  16.         MSXML::IXMLDOMNodePtr Root;
  17.         MSXML::IXMLDOMNodePtr Row;
  18.         MSXML::IXMLDOMNodePtr Col;
  19.         Root = nodelist->nextNode();
  20.         _bstr_t bstrname=Root->nodeName;
  21.         rows = Root->childNodes;
  22.         pList->DeleteAllItems();
  23.         for (int i = 0 ; i < rows->length ; i++)
  24.         {
  25.                 Row = rows->nextNode();
  26.                 cols = Row->childNodes;
  27.                 _bstr_t rowname = Row->nodeName;
  28.                 pList->InsertItem(pList->GetItemCount(),"");
  29.                 for (int j = 0 ; j < cols->length ; j++)
  30.                 {
  31.                         Col = cols->nextNode();
  32.                         IXMLDOMNodePtr node = Col->firstChild;
  33.                         _bstr_t value =  node->nodeValue;
  34.                         pList->SetItemText(i,j,value);
  35.                 }
  36.         }
  37. }
复制代码
最后添加头文件#import"msxml6.dll"  #define  MSXML MSXML2 using namespace MSXML2; #include <io.h>
我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:191.上位机VC MFC利用XML文件读取保存参数文件.rar 
文件大小:129.09 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!



回复

使用道具 举报

快速回复 返回列表 客服中心 搜索