第一步:新建一個對話框工程,在對話框上添加一個按鈕《連接》和一個ComboBox下拉框,如圖所示(注意:本次的按鈕《斷開》和按鈕《保存圖片》沒有用到)
第二步:添加頭文件
#import "msxml6.dll"
using namespace MSXML2;
注意:若提示無法打開源文件“msxml6.tlh”,只需要重新生成解決方案即可。第三步:在***Dlg.h頭文件中添加兩個變量
MSXML2::IXMLDOMDocumentPtr XMLDoc;
MSXML2::IXMLDOMElementPtr XMLURL;
HRESULT HR = XMLDoc.CreateInstance(_uuidof(MSXML2::DOMDocument60));
if (!SUCCEEDED(HR))
{
MessageBox("faild!!");
return 0;
}
if (!XMLDoc->load("URL.XML")){
XMLURL = XMLDoc->createElement("ROOT");
XMLURL->setAttribute("URL", "Address"); //設置根標籤的屬性;
XMLDoc->appendChild(XMLURL);
CString TMP;
MSXML2::IXMLDOMElementPtr XMLNODE;
for (int I = 0; I<1; I++)
{
TMP.Format("%d", I + 1);
XMLNODE = XMLDoc->createElement((_bstr_t)("URL" + TMP));
XMLNODE->setAttribute("URL", (_variant_t)"rtsp://172.16.1.122:554/av0_1");//設置標籤的屬性及內容;
XMLURL->appendChild(XMLNODE);
}
XMLDoc->save("URL.XML");
XMLNODE.Release();
m_URLComboBox.AddString("rtsp://172.16.1.122:554/av0_1");
return 0;
}
//把xml文件中的URL地址添加到combox控件中
MSXML2::IXMLDOMNodeListPtr nodelist = NULL;
XMLURL = XMLDoc->GetdocumentElement();
XMLURL->get_childNodes(&nodelist); //獲取根節點的所有子節點
long XMLNODESNUM;
nodelist->get_length(&XMLNODESNUM); //子節點的個數
MSXML2::IXMLDOMNodePtr subnode;
MSXML2::IXMLDOMNamedNodeMapPtr XMLNODEATTS;
long ATTSNUM;
//遍歷所有子節點
for (int i = 0; i < XMLNODESNUM; i++){
nodelist->get_item(i, &subnode); //獲取一個子節點
subnode->get_attributes(&XMLNODEATTS); //獲取子節點的屬性
XMLNODEATTS->get_length(&ATTSNUM); //獲取屬性的個數
for (int j = 0; j < ATTSNUM; j++){ //遍歷屬性
XMLNODEATTS->get_item(j, &subnode); //獲取一個屬性
CString url = (char*)(_bstr_t)subnode->nodeName; //獲取屬性的名字
CString addr = (char*)(_bstr_t)subnode->text; //獲取屬性的內容
m_URLComboBox.AddString(addr);
}
}
subnode.Release();
XMLNODEATTS.Release();
第五步:在了《連接》按鈕中添加以下代碼,代碼說明如下
UpdateData(TRUE);
//獲取ComboBox的內容
CString mURL;
int nSel;
nSel = m_URLComboBox.GetCurSel(); //獲取ComboBox列表框中選中項的索引
GetDlgItemText(IDC_COMBO_URL, mURL);
if (mURL == ""){
AfxMessageBox("請先輸入rtsp攝像頭網絡地址!");
return;
}
BOOL isExist = FALSE;
if (nSel == -1){ //若新輸入地址
//把新URL地址添加到XML
MSXML2::IXMLDOMNodeListPtr nodelist = NULL;
XMLURL = XMLDoc->GetdocumentElement();
XMLURL->get_childNodes(&nodelist); //獲取根節點的所有子節點
long XMLNODESNUM;
nodelist->get_length(&XMLNODESNUM); //子節點的個數
MSXML2::IXMLDOMNodePtr subnode;
MSXML2::IXMLDOMNamedNodeMapPtr XMLNODEATTS;
long ATTSNUM;
CArray<CString, CString> URLList;
//遍歷所有子節點
for (int i = 0; i < XMLNODESNUM; i++){
nodelist->get_item(i, &subnode); //獲取一個子節點
subnode->get_attributes(&XMLNODEATTS); //獲取子節點的屬性
XMLNODEATTS->get_length(&ATTSNUM); //獲取屬性的個數
for (int j = 0; j < ATTSNUM; j++){ //遍歷屬性
XMLNODEATTS->get_item(j, &subnode); //獲取一個屬性
CString url = (char*)(_bstr_t)subnode->nodeName; //獲取屬性的名字
CString addr = (char*)(_bstr_t)subnode->text; //獲取屬性的內容
URLList.Add(addr);
}
}
subnode.Release();
XMLNODEATTS.Release();
for (int i = 0; i < URLList.GetSize(); i++)
{
if (URLList[i] != mURL)
continue;
isExist == TRUE;
}
if (!isExist){ //如果新輸入的URL不存在
CString TMP;
MSXML2::IXMLDOMElementPtr XMLNODE;
TMP.Format("%d", URLList.GetSize() + 1);
XMLNODE = XMLDoc->createElement((_bstr_t)("URL" + TMP));
XMLNODE->setAttribute("URL", (_variant_t)mURL);//設置標籤的屬性及內容;
XMLURL->appendChild(XMLNODE);
XMLDoc->save("URL.XML");
XMLNODE.Release();
m_URLComboBox.AddString(mURL);
}
}