WTL 学习四 动态生成CListViewCtrl 并应用tinyxml加载远程Xml数据
2012-05-15 16:58
363 查看
本机站点:http://localhost:2000/Default6.aspx 代码内容
生成 的Xml为
stdafx.h
TestDialog.h
TestDialog.cpp 很多字符转换,也不知道应用的对不对
,先来实现功能吧,后续慢慢优化
protected void Page_Load(object sender, EventArgs e) { string strSessionXml = "<?xml version=\"1.0\" encoding=\"gb2312\"?><root><item id=\"1\" name=\"风云\" address=\"192.168.1.101\" datetime=\"2012/5/15 16:24:35\" state=\"在线\"></item><item id=\"2\" name=\"雄霸\" address=\"192.168.1.102\" datetime=\"2012/5/15 16:24:35\" state=\"离线\"></item></root>"; Response.Write(strSessionXml); }
生成 的Xml为
<?xml version="1.0" encoding="gb2312"?> <root> <item id="1" name="风云" address="192.168.1.101" datetime="2012/5/15 16:24:35" state="在线"></item> <item id="2" name="雄霸" address="192.168.1.102" datetime="2012/5/15 16:24:35" state="离线"></item> </root>
stdafx.h
#include <atlbase.h> #include <atlstr.h> #include <wtl/atlapp.h> extern CAppModule _Module; #define _WTL_NO_CSTRING // 应用ATL CString #include <atlwin.h> #include <wtl/atlframe.h> #include <wtl/atlctrls.h> #include <wtl/atldlgs.h> #include <wtl/atlmisc.h> #include <tinyxml/tinyxml.h> // 使用tinyxml #pragma comment(lib, "winhttp.lib") // 使用winhttp
TestDialog.h
class TestDialog : public CDialogImpl<TestDialog> { public: enum { IDD = IDD_TESTDLG }; BEGIN_MSG_MAP(TestDialog) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) COMMAND_ID_HANDLER(IDCANCEL, OnCancel) COMMAND_ID_HANDLER(IDOK, OnOK) END_MSG_MAP() LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/); LRESULT OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/); CListViewCtrl m_List; };
TestDialog.cpp 很多字符转换,也不知道应用的对不对
,先来实现功能吧,后续慢慢优化
BOOL GetURL(LPWSTR szUrl,CString* strResult ) { DWORD dwSize = 0; DWORD dwDownloaded = 0; HINTERNET hSession = NULL; HINTERNET hConnect = NULL; HINTERNET hRequest = NULL; BOOL bResults = FALSE; BOOL bBodyTagStart = FALSE; BOOL bBodyTagEnd = FALSE; LPWSTR lpszUserAgent = L"WinHTTP URLMonitor Docklet/1.0"; LPWSTR lpszHostName = szUrl; LPWSTR lpszUrlPath = L"/Default6.aspx"; //访问的页面 INTERNET_PORT nPort = INTERNET_DEFAULT_HTTP_PORT; LPCWSTR pwszVerb = L"GET"; // Use WinHttpOpen to obtain a session handle. hSession = WinHttpOpen( L"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322) ", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0 ); //hSession = WinHttpOpen(lpszUserAgent, WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, // WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0); // Specify an HTTP server. nPort=2000; //端口号 if (hSession) hConnect = WinHttpConnect(hSession, lpszHostName, nPort, 0); // Create an HTTP request handle. if (hConnect) hRequest = WinHttpOpenRequest(hConnect, pwszVerb, lpszUrlPath, //urlComp.lpszUrlPath, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, WINHTTP_FLAG_REFRESH); // Send a request. if (hRequest) bResults = WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0, 0); // End the request. if (bResults) bResults = WinHttpReceiveResponse(hRequest, NULL); //**************************** 编码 int fUnicode=-1; UINT uCodePage=CP_ACP; LPSTR buffer; DWORD dwBufferSize=16384; buffer=(LPSTR)LocalAlloc(LPTR, dwBufferSize); WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_CONTENT_TYPE, WINHTTP_HEADER_NAME_BY_INDEX, buffer, &dwBufferSize, WINHTTP_NO_HEADER_INDEX); TCHAR * pCursor; _tcsupr((wchar_t *)buffer); pCursor=(TCHAR *)_tcsstr((wchar_t *)buffer, TEXT("CHARSET=")); if(NULL!=pCursor) { pCursor+=8; if(lstrcmp(pCursor, TEXT("UTF-8"))==0) uCodePage=CP_UTF8; } LocalFree(buffer); //************************************** LPSTR pszOutBuffer; char pszPreviousBuffer[21]; ZeroMemory(pszPreviousBuffer, sizeof(pszPreviousBuffer)); int offset = 0; //CString strResult; if (bResults) do { dwSize = 0; if (!WinHttpQueryDataAvailable( hRequest, &dwSize)) { } pszOutBuffer = new char[dwSize+1]; if (!pszOutBuffer) { dwSize=0; } else { ZeroMemory(pszOutBuffer, dwSize+1); if (WinHttpReadData( hRequest, (LPVOID)pszOutBuffer, dwSize, &dwDownloaded)) { int iLen = dwSize+1; wchar_t *pUnicode = new wchar_t[iLen]; MultiByteToWideChar(uCodePage, 0, (LPCSTR)pszOutBuffer, -1, pUnicode, iLen); strResult->Append(pUnicode); } delete [] pszOutBuffer; } } while (dwSize>0); return TRUE; } LRESULT TestDialog::OnOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) { if(!m_List) { RECT cRect2; cRect2.left = 20; cRect2.top = 100; cRect2.bottom = 300; cRect2.right = 550; m_List.Create(m_hWnd,&cRect2,NULL,WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SINGLESEL, WS_EX_CLIENTEDGE,2009); char *szColumn[]={"编号","昵称","IP地址","登陆时间","状态"}; int widths[]={40,100,100,140,40}; LV_COLUMN lvc; lvc.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM; lvc.fmt=LVCFMT_LEFT; for(int i=0;i<5;i++) {//插入各列 USES_CONVERSION; lvc.pszText=A2W(szColumn[i]); lvc.cx=widths[i]; lvc.iSubItem=i; m_List.InsertColumn(i,&lvc); } } CString strResult; GetURL(_T("localhost"),&strResult); USES_CONVERSION; const char* pSth = T2A(strResult.GetBuffer(0)); const char* pSID = T2A(L"id"); const char* pSName = T2A(L"name"); const char* pSAddress = T2A(L"address"); const char* pSDate = T2A(L"datetime"); const char* pSState = T2A(L"state"); TiXmlDocument* myDocument = new TiXmlDocument(); myDocument->Parse(pSth); TiXmlElement *note = myDocument->RootElement(); TiXmlElement *CurrentPerson = note->FirstChildElement(); int i = 0; while(CurrentPerson) { TiXmlElement *element = CurrentPerson; TiXmlAttribute * attribute = element->FirstAttribute(); //attribute->Name(); //attribute->Value(); m_List.InsertItem(i, L""); while(attribute!= NULL) { if(strcmp( attribute->Name(),pSID)==0) { m_List.SetItemText (i, 0,A2CT(attribute->Value())); } if(strcmp( attribute->Name(),pSName)==0) { m_List.SetItemText (i, 1,A2CT(attribute->Value())); } if(strcmp( attribute->Name(),pSAddress)==0) { m_List.SetItemText (i, 2,A2CT(attribute->Value())); } if(strcmp( attribute->Name(),pSDate)==0) { //CString temp = CString(attribute->Value()).Format("%H:%M:%S"); //m_List.SetItemText (i, 3,temp.GetBuffer(1)); m_List.SetItemText (i, 3,A2CT(attribute->Value())); } if(strcmp( attribute->Name(),pSState)==0) { m_List.SetItemText (i, 4,A2CT(attribute->Value())); } attribute = attribute->Next(); } i++; CurrentPerson = CurrentPerson->NextSiblingElement(); } return TRUE; }
相关文章推荐
- Easyui-Datagrid实例-----动态加载数据生成Datagrid
- dhtmlXTree动态加载struts2中action的xml数据
- ASP.NET 动态查找数据 并且生成xml文档 同时使用xslt转换为xhtml
- IOS学习之ios应用数据存储方式(XML属性列表-plist)
- Ext Grit动态加载xml数据
- 滚屏加载--无刷新动态加载数据技术的应用
- 学习笔记之cocos2d-x2.1.1实现修改plist文件数据,用TinyXml解析XML
- .Net中应用XML动态生成窗体
- html中的数据岛:利用DSO和javascript在html中动态加载和浏览xml数据
- swiper在进行动态数据加载时的应用和处理
- ABAP动态生成经典应用之Table数据Upload 程序
- EXTJs4——树的应用----数据动态生成树
- Ext EditGrid 动态加载XML数据
- HTML5学习笔记(二十三):DOM应用之动态加载脚本
- Android学习笔记_31_通过后台代码生成View对象以及动态加载XML布局文件到LinearLayout
- as3学习笔记4:URLLoader动态加载XML
- android 开发零起步学习笔记(十五):android: 静态XML和动态加载XML混合使用,以及重写Layout控件
- 滚屏加载--无刷新动态加载数据技术的应用
- 【android动态布局】之【ListView动态加载数据模板(使用xml布局)】
- 【转】extjs加载json数据动态生成树