<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 13,comments - 0,trackbacks - 0

    這里是利用COM組建對xml文件進行操作,所以程序進入時要進行COM組件的初始化和卸載

    ::CoInitialize(NULL); 和 ::CoUninitialize();要對應

    為了不影響其他地方的操作,最好把這個放在項目的開始和結束

    你也可以使用AfxOleInit();他對CoInitialize進行了封裝,具體的區別可以到網上查一下

    另外確保安裝了MS XML Parser 運行庫

     

     

    使用時需要加上

    #import <msxml3.dll>
     

    下面的兩個函數就是對xml文件的操作,大部分操作都已涉及

     

    ///////////////////////////////////////////////////////////////////////////////
    #import <msxml3.dll>
    typedef MSXML2::IXMLDOMDocumentPtr DOMDocumentPtr;
    typedef MSXML2::IXMLDOMElementPtr DOMElementPtr;
    typedef MSXML2::IXMLDOMProcessingInstructionPtr	DOMProInstructionPtr;
    typedef MSXML2::IXMLDOMNamedNodeMapPtr DOMNamedNodeMapPtr;
    typedef MSXML2::IXMLDOMNodeListPtr DOMNodeListPtr;
    typedef MSXML2::IXMLDOMNodePtr DOMNodePtr;
    typedef MSXML2::IXMLDOMTextPtr DOMTextPtr;
    ///////////////////////////////////////////////////////////////////////////////
    int ReadXML(CString szXMLFile)
    {
    	if (szXMLFile.IsEmpty())
    		return -1;
    
    	DOMDocumentPtr pXMLDoc;
    	CString szText;
    
    	// 初始化COM組件,必須與::CoUninitialize();相對應
    	// 這里可以這么使用,但以后盡量在程序開始調用,程序結束卸載,否則可能會影響到其他地方使用
    	// 用AfxOleInit();也可以,但也必須確保只調用了一次,最好放在程序的開始
    	::CoInitialize(NULL);
    	
    	// 創建DOMDocument對象,并判斷是否創建成功
    	HRESULT	hr = pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
    	if(!SUCCEEDED(hr))
    	{
    		MessageBox(NULL, "無法創建DOMDocument對象,請檢查是否安裝了MS XML Parser 運行庫!", "Error", MB_ICONERROR|MB_OK);
    		return -1;
    	}
    
    	if(pXMLDoc->load(_variant_t(szXMLFile)) == FALSE)
    	{
    		MessageBox(NULL, "無法打開存檔!", "Error", MB_ICONERROR|MB_OK);
    		return -2;
    	}
    
    	// 是否有根節點,取得根節點
    	DOMElementPtr pRootElem = pXMLDoc->GetdocumentElement();
    	if (pRootElem == NULL)
    		return -3;
    
    	// 取得根節點的名字
    	szText = (char*)(pRootElem->GetnodeName());
    
    	// 在根節點下查找名叫Globals的節點并取得
    	DOMNodePtr pGlobalNode = pRootElem->selectSingleNode("Globals");
    	if (pGlobalNode == NULL)
    		return -3;
    	
    	// 取得屬性列表
    	DOMNamedNodeMapPtr pNodeMap = pGlobalNode->Getattributes();
    
    	// 根據名字直接取得屬性節點并獲取值
    	DOMNodePtr pAttribNode = pNodeMap->getNamedItem("Attrib");
    	szText = (char *)(pAttribNode->Gettext());
    	pAttribNode = pNodeMap->getNamedItem("作用");
    	szText = (char *)(pAttribNode->Gettext());
    
    	// 另外在有些情況下Node可以轉換成Element使用
    	DOMElementPtr pGlobalElem = pGlobalNode;
    	szText = (char*)(_bstr_t)(pGlobalElem->getAttribute("Attrib"));
    	szText = (char*)(_bstr_t)(pGlobalElem->getAttribute("作用"));
    	
    	// 如果不知道名字可以取得屬性的個數,逐個查找屬性
    	long len = pNodeMap->Getlength();
    	for (int i=0; i<len; ++i)
    	{
    		pAttribNode = pNodeMap->Getitem(i);
    		szText = (char *)(pAttribNode->GetnodeName());	// 取得屬性名字
    		szText = (char *)(pAttribNode->Gettext());		// 取得屬性值
    	}
    	
    	DOMNodePtr pTempNode;
    	// 取得Globals下的子節點
    	if((pTempNode = pGlobalNode->GetfirstChild()))
    	{
    		szText = (char*)pTempNode->GetnodeName();
    		szText = (char*)pTempNode->Gettext();
    
    		// 循環取得相鄰的節點
    		while((pTempNode = pTempNode->GetnextSibling()))
    		{
    			szText = (char*)pTempNode->GetnodeName();
    			szText = (char*)pTempNode->Gettext();
    		}
    	}
    
    	// 從根節點中查找Data的子節點
    	DOMNodePtr pDataNode = pRootElem->selectSingleNode("Data");
    	if (pDataNode == NULL)
    		return -1;
    
    	// 從Data節點下列取出所有叫Data的節點
    	DOMNodeListPtr pDataList = pDataNode->selectNodes("Data");
    	len = pDataList->Getlength();
    	for(i=0; i<len; ++i)
    	{
    		pTempNode = pDataList->Getitem(i);
    		szText = (char*)pTempNode->GetnodeName();
    		szText = (char*)pTempNode->Gettext();
    	}
    
    	// 確保卸載掉所有的對象才能調用CoUninitialize
    	if(pNodeMap)pNodeMap.Detach();
    	if(pAttribNode)pAttribNode.Detach();
    	if(pTempNode)pTempNode.Detach();
    	if(pGlobalNode)pGlobalNode.Detach();
    	if(pGlobalElem)pGlobalElem.Detach();
    	if(pDataNode)pDataNode.Detach();
    	if(pDataList)pDataList.Detach();
    	if(pRootElem)pRootElem.Detach();
    	if(pXMLDoc)pXMLDoc.Detach();
    
    	// 卸掉COM,必須與CoInitialize對應
    	::CoUninitialize();
    	return 0;
    }
    
    int SaveXML(CString szXMLFile)
    {
    	DOMDocumentPtr pXMLDoc;
    	CString szText;
    
    	// 初始化COM組件,必須與::CoUninitialize();相對應
    	// 這里可以這么使用,但以后盡量在程序開始調用,程序結束卸載,否則可能會影響到其他地方使用
    	// 用AfxOleInit();也可以,但也必須確保只調用了一次,最好放在程序的開始
    	::CoInitialize(NULL);
    
    	// 創建DOMDocument對象,并判斷是否創建成功
    	HRESULT	hr = pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
    	if(!SUCCEEDED(hr))
    	{
    		MessageBox(NULL, "無法創建DOMDocument對象,請檢查是否安裝了MS XML Parser 運行庫!", "Error", MB_ICONERROR|MB_OK);
    		return -1;
    	}
    
    	// 創建頭節點
    	DOMProInstructionPtr pXmlProNode = pXMLDoc->createProcessingInstruction(_bstr_t("xml"),_bstr_t("version=\"1.0\" encoding = \"GB2312\""));
    	pXMLDoc->appendChild((MSXML2::IXMLDOMNodePtr)pXmlProNode);	
    	pXmlProNode.Detach();	//以后不再用的,卸掉
    
    	// 創建并添加根節點
    	// 創建一個節點
    	DOMElementPtr pXmlRoot = pXMLDoc->createElement("root");
    	// 添加到文檔中
    	pXMLDoc->appendChild(pXmlRoot);
    
    	// 創建一個節點
    	DOMElementPtr pGlobalNode = pXMLDoc->createElement("Globals");
    	// 添加到根節點中
    	pXmlRoot->appendChild(pGlobalNode);
    
    	// 添加兩個屬性
    	pGlobalNode->setAttribute("Attrib", "Value");
    	pGlobalNode->setAttribute("作用", "記錄全局數據");
    
    	DOMElementPtr pTempNode = pXMLDoc->createElement("Author");
    	pTempNode->Puttext("Ren.Xia");// 添加內容
    	pGlobalNode->appendChild(pTempNode);
    	pTempNode.Detach();
    
    	pTempNode = pXMLDoc->createElement("Date");
    	pTempNode->Puttext("2011-02-12");// 添加內容
    	pGlobalNode->appendChild(pTempNode);
    	pTempNode.Detach();
    	pGlobalNode.Detach();
    
    	// 在Root下創建Data子節點
    	DOMElementPtr pDataNode = pXMLDoc->createElement("Data");
    	pDataNode->setAttribute("Attrib", "Value");
    	pDataNode->setAttribute("作用", "記錄數據");
    	pXmlRoot->appendChild(pDataNode);
    
    	for (int i=0; i<100; ++i)
    	{
    		pTempNode = pXMLDoc->createElement("Data");
    		szText.Format("%d", i);
    		pTempNode->Puttext((_bstr_t)szText);
    		pDataNode->appendChild(pTempNode);
    		pTempNode.Detach();
    	}
    	pDataNode.Detach();
    
    	// 判斷名字是否為空
    	if (szXMLFile.IsEmpty())
    	{
    		pXmlRoot.Detach();
    		pXMLDoc.Detach();
    		return -2;
    	}
    
    	// 存儲并判斷是否成功
    	hr = pXMLDoc->save((LPCTSTR)szXMLFile);
    	pXmlRoot.Detach();
    	pXMLDoc.Detach();
    	if(!SUCCEEDED(hr))
    	{
    		MessageBox(NULL, "無法保存!", "Error", MB_ICONERROR|MB_OK);
    		return -3;
    	}	
    	MessageBox(NULL, "保存完畢!", "Error", MB_ICONASTERISK|MB_OK);
    	
    	// 卸掉COM,必須與CoInitialize對應
    	::CoUninitialize();
    	return 0;
    }


     

    另外如果知道一個節點的名字"Data",但是不知道在哪一層,那個樹下

    可以在查找時名字前加個"http://"這樣就表示在任意一層查找  

     

    pRootElem->selectSingleNode(" //Data");
     

     



      本文附件下載:
    • XML.rar (484.4 KB)
    posted @ 2011-02-14 14:17 CrackRen 閱讀(118) | 評論 (0)編輯 收藏

    //調用這個函數
    void CMainFrame::OnFullScreen()
    {	
    	// TODO: Add your command handler code here	
    	CRect WindowRect;
    	GetWindowRect(&WindowRect);
    	
    	CRect ClientRect;		
    	RepositionBars(0,0xffff,AFX_IDW_PANE_FIRST,reposQuery,&ClientRect);		
    	ClientToScreen(&ClientRect);
    		
    	//獲取屏幕的分辨率	
    	int nFullWidth=GetSystemMetrics(SM_CXSCREEN);		
    	int nFullHeight=GetSystemMetrics(SM_CYSCREEN);
    		
    	CRect m_FullScreenRect;
    	m_FullScreenRect.left=WindowRect.left-ClientRect.left;	
    	m_FullScreenRect.top=WindowRect.top-ClientRect.top;
    	m_FullScreenRect.right=WindowRect.right-ClientRect.right+nFullWidth;		
    	m_FullScreenRect.bottom=WindowRect.bottom-ClientRect.bottom+nFullHeight;
    	
    	//進入全屏顯示狀態		
    	WINDOWPLACEMENT wndpl;		
    	wndpl.rcNormalPosition=m_FullScreenRect;		
    	SetWindowPlacement(&wndpl);		
    }
    posted @ 2010-12-31 13:45 CrackRen 閱讀(85) | 評論 (0)編輯 收藏

    //在最開始的地方注冊快捷鍵
    //第一個參數是設置哪個窗口接收快捷鍵
    //第二個參數是代號,唯一的最好用GlobalAddAtom()函數得到一個值
    //第三個參數是特殊按鍵有MOD_CONTROL、MOD_SHIFT、MOD_ALT、MOD_WIN
    //第四個參數是快捷鍵最好大小的ASCII碼UINT型
    
    ::RegisterHotKey(GetSafeHwnd(), 0X4736, MOD_CONTROL|MOD_SHIFT, g_HotKey);
    
    
    //在窗口的PreTranslateMessage事件中添加檢測代碼
    BOOL CHotDlg::PreTranslateMessage(MSG* pMsg) 
    {
    	// TODO: Add your specialized code here and/or call the base class
    	if (pMsg->message == WM_HOTKEY && pMsg->wParam == 0X4736)
    	{
    		//要執行的功能
    	}
    
    	return CDialog::PreTranslateMessage(pMsg);
    }
    
    
    //退出的時候卸載注冊
    UnregisterHotKey(GetSafeHwnd(), 0X4736);
    
     
    posted @ 2010-12-31 13:21 CrackRen 閱讀(52) | 評論 (0)編輯 收藏

     

    // 發送WM_NCLBUTTONDOWN消息  
    // 使Windows認為鼠標在標題條上  
    
    PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y));  
    
    posted @ 2010-12-31 13:15 CrackRen 閱讀(45) | 評論 (0)編輯 收藏
    僅列出標題
    共2頁: 上一頁 1 2 
    主站蜘蛛池模板: 男人都懂www深夜免费网站| 久久精品国产亚洲AV电影网| 在线免费观看伊人三级电影| 亚洲 自拍 另类小说综合图区 | 中文字幕在线免费看线人| 免费A级毛片无码A∨男男| 国产尤物在线视精品在亚洲| 国产大片51精品免费观看| 亚洲AV成人一区二区三区观看| 67194成是人免费无码| 亚洲日韩中文字幕无码一区| 午夜视频免费成人| 精品国产亚洲一区二区三区在线观看 | 好看的亚洲黄色经典| 无码人妻久久一区二区三区免费| 亚洲AV日韩精品久久久久久久| 久久99国产乱子伦精品免费| 亚洲一区精品视频在线| 日韩激情无码免费毛片| 国产成人综合久久精品亚洲| 亚洲精品无码久久久久AV麻豆| 国产一区二区三区免费观在线| 亚洲成年人在线观看| 毛片网站免费在线观看| 羞羞视频免费观看| 亚洲日韩精品A∨片无码| 精品免费久久久久久久| 久久亚洲精品11p| 中文字幕在线亚洲精品| 2021免费日韩视频网| 国产亚洲视频在线| 久久精品国产精品亚洲精品| 国产成人yy免费视频| jzzijzzij在线观看亚洲熟妇| 亚洲乱码中文字幕综合| 国产在线a免费观看| 一级毛片不卡免费看老司机| 亚洲综合激情视频| 亚洲一区二区视频在线观看| 日韩版码免费福利视频| 久久免费观看视频|