一个RSS阅读器类

一个RSS阅读器类

一个RSS阅读器类classCFeedItem
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{//RSS条目
一个RSS阅读器类
public:
一个RSS阅读器类CFeedItem();
一个RSS阅读器类
virtual~CFeedItem();
一个RSS阅读器类
public:
一个RSS阅读器类CStringm_strAuthor;
//作者
一个RSS阅读器类
CStringm_strCategory;//类别
一个RSS阅读器类
CStringm_strDescription;//描述信息
一个RSS阅读器类
CStringm_strLink;//链接地址
一个RSS阅读器类
CStringm_strPubDate;//发布日期
一个RSS阅读器类
CStringm_strSubject;//主题
一个RSS阅读器类
CStringm_strTitle;//标题
一个RSS阅读器类
CStringm_strReadStatus;//是否已读
一个RSS阅读器类
}
;
一个RSS阅读器类
一个RSS阅读器类
一个RSS阅读器类
classCFeedSource
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{//RSS源
一个RSS阅读器类
public:
一个RSS阅读器类CFeedSource();
一个RSS阅读器类
virtual~CFeedSource();
一个RSS阅读器类
一个RSS阅读器类
public:
一个RSS阅读器类CStringm_strCopyright;
//版权
一个RSS阅读器类
CStringm_strDescription;//描述信息
一个RSS阅读器类
CStringm_strGenerator;//生产者
一个RSS阅读器类
CStringm_strLanguage;//语言
一个RSS阅读器类
CStringm_strLastBuildDate;//上次构建日期
一个RSS阅读器类
CStringm_strLink;//链接地址
一个RSS阅读器类
CStringm_strTitle;//标题
一个RSS阅读器类
CStringm_strTtl;
一个RSS阅读器类CStringm_strWebMaster;
//管理员
一个RSS阅读器类
CStringm_strImageDescription;//图片描述信息
一个RSS阅读器类
CStringm_strImageHeight;//图片高度
一个RSS阅读器类
CStringm_strImageWidth;//图片宽度
一个RSS阅读器类
CStringm_strImageLink;//图片链接地址
一个RSS阅读器类
CStringm_strImageTitle;//图片标题
一个RSS阅读器类
CStringm_strImageUrl;//图片Url
一个RSS阅读器类
CStringm_strVersion;//图片版本
一个RSS阅读器类
}
;
一个RSS阅读器类
一个RSS阅读器类
一个RSS阅读器类
classCFeed
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{//RSS种子
一个RSS阅读器类
public:
一个RSS阅读器类CFeed();
一个RSS阅读器类CFeed(CStringstrXMLFile);
一个RSS阅读器类
virtual~CFeed();
一个RSS阅读器类
public:
一个RSS阅读器类
staticvoidRefreshAll();
一个RSS阅读器类
staticvoidMarkItemRead(CStringstrLink);
一个RSS阅读器类
staticvoidDeleteFeedSource(CStringstrLink);
一个RSS阅读器类
staticvoidDeleteListArray(CStringArray&strLinkArray);
一个RSS阅读器类
staticvoidGetFeedSourceList(CStringArray&strTitleArray,CStringArray&strLinkArray);
一个RSS阅读器类
voidLoadLocal(CString&strLink);
一个RSS阅读器类
voidBuildFromFile(CStringstrXMLFile);
一个RSS阅读器类CFeedSourcem_source;
//FeedSource
一个RSS阅读器类
CArray<CFeedItem,CFeedItem>m_item;//FeedItem
一个RSS阅读器类
BOOLm_bAdded;
一个RSS阅读器类
voidSave(BOOLbSaveSource=TRUE);
一个RSS阅读器类
private:
一个RSS阅读器类
staticCStringEscapeQuote(CStringstrValue);
一个RSS阅读器类
staticCStringGetModuleFileDir();
一个RSS阅读器类
staticCStringGetFieldValue(FieldsPtrfields,longnIndex);
一个RSS阅读器类
staticCStringGetComError(_com_error&e);
一个RSS阅读器类
staticBOOLExecuteSQL(_ConnectionPtr&pCnn,CString&strSQL,CString&strMsg);
一个RSS阅读器类
voidGetVersion(MSXML2::IXMLDOMNode*pNode);
一个RSS阅读器类
voidIterateChildNodes(MSXML2::IXMLDOMNode*pNode);
一个RSS阅读器类
voidBuildImage(MSXML2::IXMLDOMNode*pNode);
一个RSS阅读器类
voidBuildItem(MSXML2::IXMLDOMNode*pNode);
一个RSS阅读器类MSXML2::IXMLDOMDocument2
*m_pDoc;//XMLDOMDocument
一个RSS阅读器类
intm_nDepth;
一个RSS阅读器类}
;
一个RSS阅读器类
一个RSS阅读器类

一个RSS阅读器类
一个RSS阅读器类
一个RSS阅读器类
//FeedSource.cpp:implementationoftheCFeedSourceclass.
一个RSS阅读器类
//
一个RSS阅读器类一个RSS阅读器类
/**///////////////////////////////////////////////////////////////////////
一个RSS阅读器类
一个RSS阅读器类#include
"stdafx.h"
一个RSS阅读器类#include
"AgileReader.h"
一个RSS阅读器类#include
"FeedSource.h"
一个RSS阅读器类
一个RSS阅读器类#ifdef_DEBUG
一个RSS阅读器类
#undefTHIS_FILE
一个RSS阅读器类
staticcharTHIS_FILE[]=__FILE__;
一个RSS阅读器类
#definenewDEBUG_NEW
一个RSS阅读器类
#endif
一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**///////////////////////////////////////////////////////////////////////
一个RSS阅读器类//Construction/Destruction
一个RSS阅读器类一个RSS阅读器类
/**///////////////////////////////////////////////////////////////////////
一个RSS阅读器类CFeedItem::CFeedItem()
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类CFeedItem::
~CFeedItem()
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类CFeedSource::CFeedSource()
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类CFeedSource::
~CFeedSource()
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类CFeed::CFeed()
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类m_pDoc
=NULL;
一个RSS阅读器类m_nDepth
=0;
一个RSS阅读器类m_bAdded
=FALSE;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类CFeed::CFeed(CStringstrXMLFile)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类m_pDoc
=NULL;
一个RSS阅读器类m_nDepth
=0;
一个RSS阅读器类m_bAdded
=FALSE;
一个RSS阅读器类BuildFromFile(strXMLFile);
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类CFeed::
~CFeed()
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//BuildXMLFeedInformationfromanXMLFile
一个RSS阅读器类
//
一个RSS阅读器类
//strXMLFile:ParsedinXMLFileName
一个RSS阅读器类
//ThisfunctionwillbuildFeedObjectfromscratchbyparsingXMLFeedInformation
一个RSS阅读器类
//Resultisstoredinm_sourceandm_itemobjects
一个RSS阅读器类
//
一个RSS阅读器类
voidCFeed::BuildFromFile(CStringstrXMLFile)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类CStringstrTmpFile
=GetModuleFileDir()+_T("//AgileReader.xml");
一个RSS阅读器类
一个RSS阅读器类
//Step0.DownloadXMLFile
一个RSS阅读器类
if(URLDownloadToFile(NULL,strXMLFile,strTmpFile,0,NULL)!=S_OK)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{//下载XML文件
一个RSS阅读器类
AfxMessageBox(_T("Failedtodownload")+strXMLFile);
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
一个RSS阅读器类
//Step1.OpenXMLDocument,ifopenfails,thenreturn
一个RSS阅读器类
if(m_pDoc!=NULL)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类m_pDoc
->Release();
一个RSS阅读器类m_pDoc
=NULL;
一个RSS阅读器类}

一个RSS阅读器类
if(SUCCEEDED(CoCreateInstance(MSXML2::CLSID_DOMDocument,
一个RSS阅读器类NULL,
一个RSS阅读器类CLSCTX_INPROC_SERVER,
一个RSS阅读器类MSXML2::IID_IXMLDOMDocument,
一个RSS阅读器类reinterpret_cast
<void**>(&m_pDoc))))
一个RSS阅读器类
一个RSS阅读器类m_pDoc
->put_async(VARIANT_FALSE);
一个RSS阅读器类
if(m_pDoc->load(_bstr_t(strTmpFile))==VARIANT_FALSE)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{//加载XML文档
一个RSS阅读器类
//FailedtoloadXMLDocument,reporterrormessage
一个RSS阅读器类
AfxMessageBox(_T("FailedtoloadXMLDocument"));
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step2.Getversionpropertyifitisavailable
一个RSS阅读器类
//Step3.Iteratetochannelnode,getthefollowingchilditems
一个RSS阅读器类
//title
一个RSS阅读器类
//link
一个RSS阅读器类
//description
一个RSS阅读器类
//language
一个RSS阅读器类
//copyright
一个RSS阅读器类
//webMaster
一个RSS阅读器类
//lastBuildDate
一个RSS阅读器类
//ttl
一个RSS阅读器类
//generator
一个RSS阅读器类
//Thengotoimagenode,getthefollowingitems
一个RSS阅读器类
//title
一个RSS阅读器类
//url
一个RSS阅读器类
//link
一个RSS阅读器类
//width
一个RSS阅读器类
//height
一个RSS阅读器类
//description
一个RSS阅读器类
一个RSS阅读器类
//Step4.gotoitemnode,getthefollowingitems
一个RSS阅读器类
//title
一个RSS阅读器类
//description
一个RSS阅读器类
//link
一个RSS阅读器类
//author
一个RSS阅读器类
//category
一个RSS阅读器类
//pubDate
一个RSS阅读器类
//subject
一个RSS阅读器类
MSXML2::IXMLDOMNode*pNode=NULL;
一个RSS阅读器类
if(SUCCEEDED(m_pDoc->QueryInterface(MSXML2::IID_IXMLDOMNode,
一个RSS阅读器类reinterpret_cast
<void**>(&pNode))))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类IterateChildNodes(pNode);
一个RSS阅读器类pNode
->Release();
一个RSS阅读器类pNode
=NULL;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Wearenotusingsmartpointer,sowehavetoreleaseitoutself
一个RSS阅读器类
if(m_pDoc)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类m_pDoc
->Release();
一个RSS阅读器类m_pDoc
=NULL;
一个RSS阅读器类}

一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//GetFeedVersionInformation
一个RSS阅读器类
//
一个RSS阅读器类
voidCFeed::GetVersion(MSXML2::IXMLDOMNode*pNode)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//IterateChildNode
一个RSS阅读器类
//
一个RSS阅读器类
voidCFeed::IterateChildNodes(MSXML2::IXMLDOMNode*pNode)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{//迭代访问所有子节点
一个RSS阅读器类
BSTRbstrNodeName;
一个RSS阅读器类
一个RSS阅读器类
if(pNode)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类m_nDepth
++;
一个RSS阅读器类CStringstrOutput;
一个RSS阅读器类pNode
->get_nodeName(&bstrNodeName);
一个RSS阅读器类
一个RSS阅读器类
//
一个RSS阅读器类
//Findoutthenodetype(asastring).
一个RSS阅读器类
//
一个RSS阅读器类
BSTRbstrNodeType;
一个RSS阅读器类pNode
->get_nodeTypeString(&bstrNodeType);
一个RSS阅读器类CStringstrType;
一个RSS阅读器类strType
=CString(bstrNodeType);
一个RSS阅读器类SysFreeString(bstrNodeType);
一个RSS阅读器类
一个RSS阅读器类MSXML2::DOMNodeTypeeEnum;
一个RSS阅读器类pNode
->get_nodeType(&eEnum);
一个RSS阅读器类
一个RSS阅读器类CStringstrValue;
一个RSS阅读器类BSTRbstrValue;
一个RSS阅读器类
switch(eEnum)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
caseMSXML2::NODE_TEXT:
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
//TextstringintheXMLdocument
一个RSS阅读器类
BSTRbstrValue;
一个RSS阅读器类pNode
->get_text(&bstrValue);
一个RSS阅读器类strOutput
=CString(bstrValue);
一个RSS阅读器类SysFreeString(bstrValue);
一个RSS阅读器类
break;
一个RSS阅读器类}

一个RSS阅读器类
caseMSXML2::NODE_COMMENT:
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
//CommentintheXMLdocument
一个RSS阅读器类
VARIANTvValue;
一个RSS阅读器类pNode
->get_nodeValue(&vValue);
一个RSS阅读器类VariantClear(
&vValue);
一个RSS阅读器类
break;
一个RSS阅读器类}

一个RSS阅读器类
caseMSXML2::NODE_PROCESSING_INSTRUCTION:
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
//Processinginstruction
一个RSS阅读器类
strOutput=CString(bstrNodeName);
一个RSS阅读器类
break;
一个RSS阅读器类}

一个RSS阅读器类
caseMSXML2::NODE_ELEMENT:
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
//Element
一个RSS阅读器类
strOutput=CString(bstrNodeName);
一个RSS阅读器类
if(strOutput==_T("rss"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类GetVersion(pNode);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("copyright"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pNode
->get_text(&bstrValue);
一个RSS阅读器类m_source.m_strCopyright
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("title")&&m_nDepth==4)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pNode
->get_text(&bstrValue);
一个RSS阅读器类m_source.m_strTitle
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("link")&&m_nDepth==4)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pNode
->get_text(&bstrValue);
一个RSS阅读器类m_source.m_strLink
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("description")&&m_nDepth==4)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pNode
->get_text(&bstrValue);
一个RSS阅读器类m_source.m_strDescription
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("language"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pNode
->get_text(&bstrValue);
一个RSS阅读器类m_source.m_strLanguage
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("webMaster"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pNode
->get_text(&bstrValue);
一个RSS阅读器类m_source.m_strWebMaster
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("lastBuildDate"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pNode
->get_text(&bstrValue);
一个RSS阅读器类m_source.m_strLastBuildDate
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("ttl"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pNode
->get_text(&bstrValue);
一个RSS阅读器类m_source.m_strTtl
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("generator"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pNode
->get_text(&bstrValue);
一个RSS阅读器类m_source.m_strGenerator
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("image"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类BuildImage(pNode);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("item"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类BuildItem(pNode);
一个RSS阅读器类}

一个RSS阅读器类
break;
一个RSS阅读器类}

一个RSS阅读器类
caseMSXML2::NODE_DOCUMENT:
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
//Document
一个RSS阅读器类
strOutput=CString(bstrNodeName)+_T("-")+CString(strType);
一个RSS阅读器类
break;
一个RSS阅读器类}

一个RSS阅读器类
caseMSXML2::NODE_DOCUMENT_TYPE:
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
//DocumentType
一个RSS阅读器类
strOutput=CString(bstrNodeName)+_T("-")+CString(strType);
一个RSS阅读器类
break;
一个RSS阅读器类}

一个RSS阅读器类
caseMSXML2::NODE_DOCUMENT_FRAGMENT:
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
//DocumentFragment
一个RSS阅读器类
strOutput=CString(bstrNodeName)+_T("-")+CString(strType);
一个RSS阅读器类
break;
一个RSS阅读器类}

一个RSS阅读器类
caseMSXML2::NODE_NOTATION:
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
//Notation
一个RSS阅读器类
strOutput=CString(bstrNodeName)+_T("-")+CString(strType);
一个RSS阅读器类
break;
一个RSS阅读器类}

一个RSS阅读器类
caseMSXML2::NODE_ENTITY:
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
//Entity
一个RSS阅读器类
strOutput=CString(bstrNodeName)+_T("-")+CString(strType);
一个RSS阅读器类
break;
一个RSS阅读器类}

一个RSS阅读器类
caseMSXML2::NODE_ENTITY_REFERENCE:
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
//EntityReference
一个RSS阅读器类
strOutput=CString(bstrNodeName)+_T("-")+CString(strType);
一个RSS阅读器类}

一个RSS阅读器类
caseMSXML2::NODE_CDATA_SECTION:
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
//CDatasection
一个RSS阅读器类
strOutput=CString(bstrNodeName)+_T("-")+CString(strType);
一个RSS阅读器类}

一个RSS阅读器类}

一个RSS阅读器类SysFreeString(bstrNodeName);
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//
一个RSS阅读器类
//Anychildnodesofthisnodeneeddisplayingtoo.
一个RSS阅读器类
//
一个RSS阅读器类
MSXML2::IXMLDOMNode*pNext=NULL;
一个RSS阅读器类MSXML2::IXMLDOMNode
*pChild;
一个RSS阅读器类pNode
->get_firstChild(&pChild);
一个RSS阅读器类
while(pChild)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{//递归遍历子节点
一个RSS阅读器类
IterateChildNodes(pChild);
一个RSS阅读器类pChild
->get_nextSibling(&pNext);
一个RSS阅读器类pChild
->Release();
一个RSS阅读器类pChild
=pNext;
一个RSS阅读器类}

一个RSS阅读器类m_nDepth
--;//递归深度减
一个RSS阅读器类
}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//BuildImageSection
一个RSS阅读器类
//
一个RSS阅读器类
voidCFeed::BuildImage(MSXML2::IXMLDOMNode*pNode)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类MSXML2::IXMLDOMNode
*pNext=NULL;
一个RSS阅读器类MSXML2::IXMLDOMNode
*pChild;
一个RSS阅读器类CStringstrOutput;
一个RSS阅读器类BSTRbstrNodeName;
一个RSS阅读器类BSTRbstrValue;
一个RSS阅读器类pNode
->get_firstChild(&pChild);
一个RSS阅读器类
while(pChild)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pChild
->get_nodeName(&bstrNodeName);
一个RSS阅读器类strOutput
=CString(bstrNodeName);
一个RSS阅读器类
if(strOutput==_T("title"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pChild
->get_text(&bstrValue);
一个RSS阅读器类m_source.m_strImageTitle
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("url"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pChild
->get_text(&bstrValue);
一个RSS阅读器类m_source.m_strImageUrl
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("link"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pChild
->get_text(&bstrValue);
一个RSS阅读器类m_source.m_strImageLink
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("width"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pChild
->get_text(&bstrValue);
一个RSS阅读器类m_source.m_strImageWidth
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("height"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pChild
->get_text(&bstrValue);
一个RSS阅读器类m_source.m_strImageHeight
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("description"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pChild
->get_text(&bstrValue);
一个RSS阅读器类m_source.m_strImageDescription
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类pChild
->get_nextSibling(&pNext);
一个RSS阅读器类pChild
->Release();
一个RSS阅读器类pChild
=pNext;
一个RSS阅读器类}

一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//BuildItemSection
一个RSS阅读器类
//
一个RSS阅读器类
voidCFeed::BuildItem(MSXML2::IXMLDOMNode*pNode)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类MSXML2::IXMLDOMNode
*pNext=NULL;
一个RSS阅读器类MSXML2::IXMLDOMNode
*pChild;
一个RSS阅读器类CStringstrOutput;
一个RSS阅读器类BSTRbstrNodeName;
一个RSS阅读器类CFeedItemitem;
一个RSS阅读器类BSTRbstrValue;
一个RSS阅读器类pNode
->get_firstChild(&pChild);
一个RSS阅读器类
while(pChild)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pChild
->get_nodeName(&bstrNodeName);
一个RSS阅读器类strOutput
=CString(bstrNodeName);
一个RSS阅读器类
if(strOutput==_T("title"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pChild
->get_text(&bstrValue);
一个RSS阅读器类item.m_strTitle
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("description"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pChild
->get_text(&bstrValue);
一个RSS阅读器类item.m_strDescription
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("link"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pChild
->get_text(&bstrValue);
一个RSS阅读器类item.m_strLink
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("author"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pChild
->get_text(&bstrValue);
一个RSS阅读器类item.m_strAuthor
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("category"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pChild
->get_text(&bstrValue);
一个RSS阅读器类item.m_strCategory
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("pubDate"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pChild
->get_text(&bstrValue);
一个RSS阅读器类item.m_strPubDate
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
elseif(strOutput==_T("subject"))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pChild
->get_text(&bstrValue);
一个RSS阅读器类item.m_strSubject
=CString(bstrValue);
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类pChild
->get_nextSibling(&pNext);
一个RSS阅读器类pChild
->Release();
一个RSS阅读器类pChild
=pNext;
一个RSS阅读器类}

一个RSS阅读器类m_item.Add(item);
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//SaveFeedInformationintoDatabase
一个RSS阅读器类
//
一个RSS阅读器类一个RSS阅读器类
voidCFeed::Save(BOOLbSaveSource/**//*=TRUE*/)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{//保持RSS种子信息倒数据库种
一个RSS阅读器类
_ConnectionPtrpCnn=NULL;
一个RSS阅读器类CStringstrSQL;
一个RSS阅读器类CStringstrMsg;
一个RSS阅读器类
intnIndex;
一个RSS阅读器类
一个RSS阅读器类
//Step1.Createobject
一个RSS阅读器类
pCnn.CreateInstance(__uuidof(Connection));
一个RSS阅读器类
if(pCnn==NULL)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(_T(
"Cannotcreateconnectionobject,pleaseinstallMDAC!"));
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step2.Openconnection
一个RSS阅读器类
try
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类CStringstrCnn;
一个RSS阅读器类strCnn.Format(_T(
"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=%s//AgileReader.mdb;JetOLEDB:DatabasePassword=philips;"),GetModuleFileDir());
一个RSS阅读器类pCnn
->Open(_bstr_t(strCnn),"","",adConnectUnspecified);
一个RSS阅读器类}

一个RSS阅读器类
catch(_com_error&e)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(_T(
"Cannotopenconnection:/n")+GetComError(e));
一个RSS阅读器类pCnn.Release();
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step3.ExecuteInsertStatementonFeedSource
一个RSS阅读器类
//Indoubleclickcase,wedon'twanttosavethis
一个RSS阅读器类
if(bSaveSource)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类strSQL.Format(_T(
"insertintoFeedSource(FeedLink,description,title,version,copyright,generator,feedlanguage,lastbuilddate,ttl,webmaster,imagedescription,imageheight,imagewidth,imagelink,imagetitle,imageurl)values('%s','%s','%s','%s','%s','%s','%s','%s',%d,'%s','%s','%s','%s','%s','%s','%s')"),
一个RSS阅读器类EscapeQuote(m_source.m_strLink),
一个RSS阅读器类EscapeQuote(m_source.m_strDescription),
一个RSS阅读器类EscapeQuote(m_source.m_strTitle),
一个RSS阅读器类_T(
"2.0"),
一个RSS阅读器类EscapeQuote(m_source.m_strCopyright),
一个RSS阅读器类EscapeQuote(m_source.m_strGenerator),
一个RSS阅读器类EscapeQuote(m_source.m_strLanguage),
一个RSS阅读器类EscapeQuote(m_source.m_strLastBuildDate),
一个RSS阅读器类EscapeQuote(m_source.m_strTtl),
一个RSS阅读器类EscapeQuote(m_source.m_strWebMaster),
一个RSS阅读器类EscapeQuote(m_source.m_strImageDescription),
一个RSS阅读器类EscapeQuote(m_source.m_strImageHeight),
一个RSS阅读器类EscapeQuote(m_source.m_strImageWidth),
一个RSS阅读器类EscapeQuote(m_source.m_strImageLink),
一个RSS阅读器类EscapeQuote(m_source.m_strImageTitle),
一个RSS阅读器类EscapeQuote(m_source.m_strImageUrl));
一个RSS阅读器类
if(!ExecuteSQL(pCnn,strSQL,strMsg))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
//AfxMessageBox(strMsg+strSQL);
一个RSS阅读器类
}

一个RSS阅读器类
else
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类m_bAdded
=TRUE;
一个RSS阅读器类}

一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step4.ExecuteInsertStatementonFeedItem
一个RSS阅读器类
for(nIndex=0;nIndex<m_item.GetSize();nIndex++)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类strSQL.Format(_T(
"insertintoFeedItem(FeedLink,title,link,description,pubdate,author,category,subject)values('%s','%s','%s','%s','%s','%s','%s','%s')"),
一个RSS阅读器类EscapeQuote(m_source.m_strLink),
一个RSS阅读器类EscapeQuote(m_item[nIndex].m_strTitle),
一个RSS阅读器类EscapeQuote(m_item[nIndex].m_strLink),
一个RSS阅读器类EscapeQuote(m_item[nIndex].m_strDescription),
一个RSS阅读器类EscapeQuote(m_item[nIndex].m_strPubDate),
一个RSS阅读器类EscapeQuote(m_item[nIndex].m_strAuthor),
一个RSS阅读器类EscapeQuote(m_item[nIndex].m_strCategory),
一个RSS阅读器类EscapeQuote(m_item[nIndex].m_strSubject)
一个RSS阅读器类);
一个RSS阅读器类
if(!ExecuteSQL(pCnn,strSQL,strMsg))
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
//AfxMessageBox(strMsg+strSQL);
一个RSS阅读器类
}

一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类pCnn.Release();
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//ExecuteSQLStatementandreturnerrormessageifany
一个RSS阅读器类
//
一个RSS阅读器类
BOOLCFeed::ExecuteSQL(_ConnectionPtr&pCnn,CString&strSQL,CString&strMsg)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
try
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类pCnn
->Execute(_bstr_t(strSQL),NULL,adCmdText);
一个RSS阅读器类}

一个RSS阅读器类
catch(_com_error&e)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类strMsg
=GetComError(e);
一个RSS阅读器类
returnFALSE;
一个RSS阅读器类}

一个RSS阅读器类
returnTRUE;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//RetrieveComErrorInformation
一个RSS阅读器类
//
一个RSS阅读器类
CStringCFeed::GetComError(_com_error&e)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类CStringstrMsg;
一个RSS阅读器类
一个RSS阅读器类_bstr_tbstrSource(e.Source());
一个RSS阅读器类_bstr_tbstrDescription(e.Description());
一个RSS阅读器类
一个RSS阅读器类strMsg.Format(_T(
"Code=%08lx/nCodemeaning=%s/nSource=%s/nDescription=%s"),
一个RSS阅读器类e.Error(),
一个RSS阅读器类e.ErrorMessage(),
一个RSS阅读器类(LPCSTR)bstrSource,
一个RSS阅读器类(LPCSTR)bstrDescription);
一个RSS阅读器类
returnstrMsg;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//LoadFeedInformationfromdatabase
一个RSS阅读器类
//
一个RSS阅读器类
voidCFeed::LoadLocal(CString&strLink)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{//从数据库中读取RSS种子信息
一个RSS阅读器类
_ConnectionPtrpCnn=NULL;
一个RSS阅读器类CStringstrSQL;
一个RSS阅读器类CStringstrMsg;
一个RSS阅读器类_RecordsetPtrrs
=NULL;
一个RSS阅读器类
一个RSS阅读器类
//Step1.Createobject
一个RSS阅读器类
pCnn.CreateInstance(__uuidof(Connection));
一个RSS阅读器类
if(pCnn==NULL)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(_T(
"Cannotcreateconnectionobject,pleaseinstallMDAC!"));
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step2.Openconnection
一个RSS阅读器类
try
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类CStringstrCnn;
一个RSS阅读器类strCnn.Format(_T(
"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=%s//AgileReader.mdb;JetOLEDB:DatabasePassword=philips;"),GetModuleFileDir());
一个RSS阅读器类pCnn
->Open(_bstr_t(strCnn),"","",adConnectUnspecified);
一个RSS阅读器类}

一个RSS阅读器类
catch(_com_error&e)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(_T(
"Cannotopenconnection:/n")+GetComError(e));
一个RSS阅读器类pCnn.Release();
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step3.ReadFeedSourceandpopulateitintom_sourceobject
一个RSS阅读器类
strSQL.Format(_T("select*fromFeedSourcewhereFeedLink='%s'"),strLink);
一个RSS阅读器类
try
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类rs
=pCnn->Execute(_bstr_t(strSQL),NULL,adCmdText);
一个RSS阅读器类
if(rs!=NULL&&rs->adoEOF!=TRUE)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类m_source.m_strLink
=strLink;
一个RSS阅读器类m_source.m_strDescription
=GetFieldValue(rs->Fields,1);
一个RSS阅读器类m_source.m_strTitle
=GetFieldValue(rs->Fields,2);
一个RSS阅读器类m_source.m_strVersion
=GetFieldValue(rs->Fields,3);
一个RSS阅读器类m_source.m_strCopyright
=GetFieldValue(rs->Fields,4);
一个RSS阅读器类m_source.m_strGenerator
=GetFieldValue(rs->Fields,5);
一个RSS阅读器类m_source.m_strLanguage
=GetFieldValue(rs->Fields,6);
一个RSS阅读器类m_source.m_strLastBuildDate
=GetFieldValue(rs->Fields,7);
一个RSS阅读器类m_source.m_strTtl
=GetFieldValue(rs->Fields,8);
一个RSS阅读器类m_source.m_strWebMaster
=GetFieldValue(rs->Fields,9);
一个RSS阅读器类m_source.m_strImageDescription
=GetFieldValue(rs->Fields,10);
一个RSS阅读器类m_source.m_strImageHeight
=GetFieldValue(rs->Fields,11);
一个RSS阅读器类m_source.m_strImageWidth
=GetFieldValue(rs->Fields,12);
一个RSS阅读器类m_source.m_strImageLink
=GetFieldValue(rs->Fields,13);
一个RSS阅读器类m_source.m_strImageTitle
=GetFieldValue(rs->Fields,14);
一个RSS阅读器类m_source.m_strImageUrl
=GetFieldValue(rs->Fields,15);
一个RSS阅读器类}

一个RSS阅读器类}

一个RSS阅读器类
catch(_com_error&e)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(GetComError(e));
一个RSS阅读器类}

一个RSS阅读器类rs.Release();
一个RSS阅读器类rs
=NULL;
一个RSS阅读器类
一个RSS阅读器类
//Step4.ReadFeedItemandpopulateitintom_itemobject
一个RSS阅读器类
strSQL.Format(_T("select*fromFeedItemwhereFeedLink='%s'orderbypubDatedesc,titleasc"),strLink);
一个RSS阅读器类
try
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类rs
=pCnn->Execute(_bstr_t(strSQL),NULL,adCmdText);
一个RSS阅读器类
while(rs!=NULL&&rs->adoEOF!=TRUE)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
if(rs->adoEOF)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
break;
一个RSS阅读器类}

一个RSS阅读器类CFeedItemitem;
一个RSS阅读器类item.m_strTitle
=GetFieldValue(rs->Fields,1);
一个RSS阅读器类item.m_strLink
=GetFieldValue(rs->Fields,2);
一个RSS阅读器类item.m_strDescription
=GetFieldValue(rs->Fields,3);
一个RSS阅读器类item.m_strPubDate
=GetFieldValue(rs->Fields,4);
一个RSS阅读器类item.m_strAuthor
=GetFieldValue(rs->Fields,5);
一个RSS阅读器类item.m_strCategory
=GetFieldValue(rs->Fields,6);
一个RSS阅读器类item.m_strSubject
=GetFieldValue(rs->Fields,7);
一个RSS阅读器类item.m_strReadStatus
=GetFieldValue(rs->Fields,8);
一个RSS阅读器类m_item.Add(item);
一个RSS阅读器类rs
->MoveNext();
一个RSS阅读器类
if(rs->adoEOF)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
break;
一个RSS阅读器类}

一个RSS阅读器类}

一个RSS阅读器类}

一个RSS阅读器类
catch(_com_error&e)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(GetComError(e));
一个RSS阅读器类}

一个RSS阅读器类rs.Release();
一个RSS阅读器类rs
=NULL;
一个RSS阅读器类
一个RSS阅读器类pCnn.Release();
一个RSS阅读器类pCnn
=NULL;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//GetFieldValue
一个RSS阅读器类
//
一个RSS阅读器类
CStringCFeed::GetFieldValue(FieldsPtrfields,longnIndex)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类_variant_tvt
=fields->GetItem(nIndex)->Value;
一个RSS阅读器类
if(vt.vt==VT_NULL||vt.vt==VT_EMPTY)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
return_T("");
一个RSS阅读器类}

一个RSS阅读器类
returnCString((char*)_bstr_t(vt));
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
voidCFeed::GetFeedSourceList(CStringArray&strTitleArray,CStringArray&strLinkArray)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类_ConnectionPtrpCnn
=NULL;
一个RSS阅读器类CStringstrSQL;
一个RSS阅读器类CStringstrMsg;
一个RSS阅读器类_RecordsetPtrrs
=NULL;
一个RSS阅读器类
一个RSS阅读器类
//Step1.Createobject
一个RSS阅读器类
pCnn.CreateInstance(__uuidof(Connection));
一个RSS阅读器类
if(pCnn==NULL)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(_T(
"Cannotcreateconnectionobject,pleaseinstallMDAC!"));
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step2.Openconnection
一个RSS阅读器类
try
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类CStringstrCnn;
一个RSS阅读器类strCnn.Format(_T(
"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=%s//AgileReader.mdb;JetOLEDB:DatabasePassword=philips;"),GetModuleFileDir());
一个RSS阅读器类pCnn
->Open(_bstr_t(strCnn),"","",adConnectUnspecified);
一个RSS阅读器类}

一个RSS阅读器类
catch(_com_error&e)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(_T(
"Cannotopenconnection:/n")+GetComError(e));
一个RSS阅读器类pCnn.Release();
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step3.ReadFeedSourceandpopulateitintom_sourceobject
一个RSS阅读器类
strSQL=_T("selectdistincttitle,FeedLinkfromFeedSourceorderbytitle");
一个RSS阅读器类
try
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类rs
=pCnn->Execute(_bstr_t(strSQL),NULL,adCmdText);
一个RSS阅读器类
while(rs!=NULL&&rs->adoEOF!=TRUE&&rs->BOF!=TRUE)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
if(rs->adoEOF)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
break;
一个RSS阅读器类}

一个RSS阅读器类strTitleArray.Add(GetFieldValue(rs
->Fields,0));
一个RSS阅读器类strLinkArray.Add(GetFieldValue(rs
->Fields,1));
一个RSS阅读器类rs
->MoveNext();
一个RSS阅读器类}

一个RSS阅读器类}

一个RSS阅读器类
catch(_com_error&e)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(GetComError(e));
一个RSS阅读器类}

一个RSS阅读器类rs.Release();
一个RSS阅读器类rs
=NULL;
一个RSS阅读器类pCnn.Release();
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//GetModuleFilePath
一个RSS阅读器类
//
一个RSS阅读器类
CStringCFeed::GetModuleFileDir()
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{//获取模块文件路径
一个RSS阅读器类
DWORDdwLength,dwSize;
一个RSS阅读器类TCHARszFileName[MAX_PATH];
一个RSS阅读器类CStringstrFileName;
一个RSS阅读器类
intnPos;
一个RSS阅读器类
一个RSS阅读器类dwSize
=sizeof(szFileName)/sizeof(szFileName[0]);
一个RSS阅读器类dwLength
=::GetModuleFileName(AfxGetInstanceHandle(),szFileName,dwSize);
一个RSS阅读器类
if(dwLength<=0)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
return_T("");
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类strFileName
=szFileName;
一个RSS阅读器类nPos
=strFileName.ReverseFind('//');
一个RSS阅读器类
returnstrFileName.Left(nPos);
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//EscapeSingleQuote
一个RSS阅读器类
//
一个RSS阅读器类
CStringCFeed::EscapeQuote(CStringstrValue)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类strValue.Replace(_T(
"'"),_T("''"));
一个RSS阅读器类
returnstrValue;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//DeletelistfromDatabase
一个RSS阅读器类
//
一个RSS阅读器类
voidCFeed::DeleteListArray(CStringArray&strLinkArray)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类_ConnectionPtrpCnn
=NULL;
一个RSS阅读器类CStringstrSQL;
一个RSS阅读器类CStringstrMsg;
一个RSS阅读器类
intnIndex;
一个RSS阅读器类
一个RSS阅读器类
//Step1.Createobject
一个RSS阅读器类
pCnn.CreateInstance(__uuidof(Connection));
一个RSS阅读器类
if(pCnn==NULL)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(_T(
"Cannotcreateconnectionobject,pleaseinstallMDAC!"));
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step2.Openconnection
一个RSS阅读器类
try
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类CStringstrCnn;
一个RSS阅读器类strCnn.Format(_T(
"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=%s//AgileReader.mdb;JetOLEDB:DatabasePassword=philips;"),GetModuleFileDir());
一个RSS阅读器类pCnn
->Open(_bstr_t(strCnn),"","",adConnectUnspecified);
一个RSS阅读器类}

一个RSS阅读器类
catch(_com_error&e)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(_T(
"Cannotopenconnection:/n")+GetComError(e));
一个RSS阅读器类pCnn.Release();
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step3.DeleteLinkfromFeedListtable
一个RSS阅读器类
for(nIndex=0;nIndex<strLinkArray.GetSize();nIndex++)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类strSQL.Format(_T(
"deletefromFeedItemwherelink='%s'"),EscapeQuote(strLinkArray[nIndex]));
一个RSS阅读器类ExecuteSQL(pCnn,strSQL,strMsg);
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step4.Done!
一个RSS阅读器类
pCnn.Release();
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//DeleteFeedSource
一个RSS阅读器类
//
一个RSS阅读器类
voidCFeed::DeleteFeedSource(CStringstrLink)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类_ConnectionPtrpCnn
=NULL;
一个RSS阅读器类CStringstrSQL;
一个RSS阅读器类CStringstrMsg;
一个RSS阅读器类
一个RSS阅读器类
//Step1.Createobject
一个RSS阅读器类
pCnn.CreateInstance(__uuidof(Connection));
一个RSS阅读器类
if(pCnn==NULL)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(_T(
"Cannotcreateconnectionobject,pleaseinstallMDAC!"));
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step2.Openconnection
一个RSS阅读器类
try
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类CStringstrCnn;
一个RSS阅读器类strCnn.Format(_T(
"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=%s//AgileReader.mdb;JetOLEDB:DatabasePassword=philips;"),GetModuleFileDir());
一个RSS阅读器类pCnn
->Open(_bstr_t(strCnn),"","",adConnectUnspecified);
一个RSS阅读器类}

一个RSS阅读器类
catch(_com_error&e)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(_T(
"Cannotopenconnection:/n")+GetComError(e));
一个RSS阅读器类pCnn.Release();
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step3.DeleteLinkfromFeedListtable
一个RSS阅读器类
strSQL.Format(_T("deletefromFeedSourcewhereFeedLink='%s'"),EscapeQuote(strLink));
一个RSS阅读器类ExecuteSQL(pCnn,strSQL,strMsg);
一个RSS阅读器类
一个RSS阅读器类
//Step4.Done!
一个RSS阅读器类
pCnn.Release();
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//Markanitemasread
一个RSS阅读器类
//
一个RSS阅读器类
voidCFeed::MarkItemRead(CStringstrLink)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{//标记Rss条目为已读状态
一个RSS阅读器类
_ConnectionPtrpCnn=NULL;
一个RSS阅读器类CStringstrSQL;
一个RSS阅读器类CStringstrMsg;
一个RSS阅读器类
一个RSS阅读器类
//Step1.Createobject
一个RSS阅读器类
pCnn.CreateInstance(__uuidof(Connection));
一个RSS阅读器类
if(pCnn==NULL)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(_T(
"Cannotcreateconnectionobject,pleaseinstallMDAC!"));
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step2.Openconnection
一个RSS阅读器类
try
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类CStringstrCnn;
一个RSS阅读器类strCnn.Format(_T(
"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=%s//AgileReader.mdb;JetOLEDB:DatabasePassword=philips;"),GetModuleFileDir());
一个RSS阅读器类pCnn
->Open(_bstr_t(strCnn),"","",adConnectUnspecified);
一个RSS阅读器类}

一个RSS阅读器类
catch(_com_error&e)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(_T(
"Cannotopenconnection:/n")+GetComError(e));
一个RSS阅读器类pCnn.Release();
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step3.DeleteLinkfromFeedListtable
一个RSS阅读器类
strSQL.Format(_T("updateFeedItemsetreadstatus=1wherelink='%s'"),EscapeQuote(strLink));
一个RSS阅读器类ExecuteSQL(pCnn,strSQL,strMsg);
一个RSS阅读器类
一个RSS阅读器类
//Step4.Done!
一个RSS阅读器类
pCnn.Release();
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类一个RSS阅读器类
/**//////////////////////////////////////////////////////////////////////////////
一个RSS阅读器类//RefreshAllSubScriptions
一个RSS阅读器类
//
一个RSS阅读器类
voidCFeed::RefreshAll()
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{//刷新订阅信息
一个RSS阅读器类
_ConnectionPtrpCnn=NULL;
一个RSS阅读器类CStringstrSQL;
一个RSS阅读器类CStringstrMsg;
一个RSS阅读器类CStringArraystrLinkArray;
一个RSS阅读器类_RecordsetPtrrs
=NULL;
一个RSS阅读器类
一个RSS阅读器类
//Step1.Createobject
一个RSS阅读器类
pCnn.CreateInstance(__uuidof(Connection));
一个RSS阅读器类
if(pCnn==NULL)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(_T(
"Cannotcreateconnectionobject,pleaseinstallMDAC!"));
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step2.Openconnection
一个RSS阅读器类
try
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类CStringstrCnn;
一个RSS阅读器类strCnn.Format(_T(
"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=%s//AgileReader.mdb;JetOLEDB:DatabasePassword=philips;"),GetModuleFileDir());
一个RSS阅读器类pCnn
->Open(_bstr_t(strCnn),"","",adConnectUnspecified);
一个RSS阅读器类}

一个RSS阅读器类
catch(_com_error&e)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(_T(
"Cannotopenconnection:/n")+GetComError(e));
一个RSS阅读器类pCnn.Release();
一个RSS阅读器类
return;
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step3.Getallthesubscriptions
一个RSS阅读器类
strSQL=_T("selectFeedLinkfromFeedSource");
一个RSS阅读器类
try
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类rs
=pCnn->Execute(_bstr_t(strSQL),NULL,adCmdText);
一个RSS阅读器类
while(rs!=NULL&&rs->adoEOF!=TRUE)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
if(rs->adoEOF)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类
break;
一个RSS阅读器类}

一个RSS阅读器类strLinkArray.Add(GetFieldValue(rs
->Fields,0));
一个RSS阅读器类rs
->MoveNext();
一个RSS阅读器类}

一个RSS阅读器类}

一个RSS阅读器类
catch(_com_error&e)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类AfxMessageBox(GetComError(e));
一个RSS阅读器类}

一个RSS阅读器类rs.Release();
一个RSS阅读器类rs
=NULL;
一个RSS阅读器类
一个RSS阅读器类
//Step4.Refreaheachlink
一个RSS阅读器类
for(intnIndex=0;nIndex<strLinkArray.GetSize();nIndex++)
一个RSS阅读器类一个RSS阅读器类
一个RSS阅读器类{
一个RSS阅读器类CFeedfeed(strLinkArray.GetAt(nIndex));
一个RSS阅读器类feed.m_source.m_strLink
=strLinkArray.GetAt(nIndex);
一个RSS阅读器类feed.Save();
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类
//Step5.Done!
一个RSS阅读器类
pCnn.Release();
一个RSS阅读器类}

一个RSS阅读器类
一个RSS阅读器类